特定のプロセス名が実際に実行されているかどうかを確認するコマンドラインオプションまたは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
が、より直接的な方法があると思います/希望します...
答え1
ご意見から以下を明確にしてください。
実際には、「アクティブ」プロセスのみを出力する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が返されます。「正常に利用可能です。」つまり、死んだものと収穫されていないものはすべてありません(ジ)も停止しない(時間)。
答え2
次のように、grepの-vオプションを使用して正規表現を無効にできます。
for p in $(pgrep ^gnuserv$) ;do ps x |grep "^\s*$p" | grep -v \<defunct\> ;done
答え3
## bash
## function to check if a process is alive and running:
_isRunning() {
ps -o comm= -C "$1" 2>/dev/null | grep -x "$1" >/dev/null 2>&1
}
## example 1: checking if "gedit" is running
if _isRunning gedit; then
echo "gedit is running"
else
echo "gedit is not running"
fi
## example 2: start lxpanel if it is not there
if ! _isRunning lxpanel; then
lxpanel &
fi
## or
_isRunning lxpanel || (lxpanel &)
ノート:またはpgrep -x lxpanel
死んだ場合でも、pidof lxpanel
まだ実行中であると報告されます(ゾンビ)。lxpanel
したがって、アクティブで実行中のプロセスを取得するには、以下を使用する必要がありますps
。grep
答え4
コマンドラインが文字列と一致するプロセスを一覧表示します。
livepgrep(){ ps o state=,pid=,command=|sed -E -n "/ sed -E -n/d;/^[^ZT] +[0-9]+ .*$@/p"; }
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | | |
processes ----+ | | | | | | | | | |
output format --+ | | | | | | | | |
process state ------+ | | | | | | | |
pid -----------------------+ | | | | | | |
full command line ----------------+ | | | | | |
sed as the filter -----------------------+ | | | | |
use extended regex -------------------------+ | | | |
exclude sed from search results ----------------------+ | | |
state != Z (zombie, defunct) != T (stopped) -----------------------+ | |
pid ----------------------------------------------------------------------+ |
string to search in the command line ----------------------------------------------+
例:
$ livepgrep tint2
S 493 tint2
$ livepgrep python
S 525 /usr/bin/python /bin/udiskie -C -F -s
S 580 python2 /home/xxx/bin/twmcpuram