Process
如何僅列出非 <defunct> 程序?
是否有命令行選項的組合
ps
或pgrep
其他相對直接的方式來確定特定程序名稱是否實際正在執行(可用於正常使用)..通過“執行”,我的意思是明確排除程序
<defunct>
或任何其他非執行程序(例如殭屍:)……此範例腳本顯示了一個
<defunct>
項目範例:#!/bin/bash ubuntu 10.04 pgrep ^gnuserv$ # 25591 # 25599 # 27330 ps $(pgrep ^gnuserv$) # command ammended as per pilcrow's good suggestion # PID TTY STAT TIME COMMAND # 25591 ? Zs 0:00 [gnuserv] <defunct> # 25599 ? Zs 0:00 [gnuserv] <defunct> # 27330 pts/2 S+ 0:00 gnuserv
我可以進一步
sed
輸出,但我認為/希望有更直接的方法……
在您的評論中,您澄清:
我實際上正在尋找 ps 或 pgrep (或類似)的單步選項,它只輸出“活動”程序……
恐怕您對目前的 ps/pgrep 實現不走運。
像這樣的後期過濾依賴於對初始輸出的全面理解,而我沒有……
但是您可以獲得這種理解,並且更好的是,根據需要控制該輸出。嘗試這樣的事情:
function pgrep_live { pids=$(pgrep "$1"); [ "$pids" ] || return; ps -o s= -o pid= $pids | sed -n 's/^[^ZT][[:space:]]\+//p'; }
這將返回與您的輸入字元串匹配的任何 pgrep 程序的 pid,這些程序*“可用於正常使用”*,即既不是 dead+unreaped ( Z ) 也不是已停止 ( T )。