pgrep 名前などの条件に合うプロセスのPIDを表示する
pgrep [オプション] パターン試してみる
pgrep sleep名前に sleep を含むプロセスのPIDを表示します。
pgrep -l -x sleep名前が完全に sleep のものについて、PIDとプロセス名を表示します。
pgrep -a sleepPIDとコマンドライン全体を表示します。引数の違いも見分けられます。
pgrep -f '^sleep 100002'コマンドライン全体で探します。引数まで指定して、1つに絞れます。
pgrep -c -x sleep一致したプロセスの数だけを表示します。
pgrep -o -x sleep一致したうち、最も古いプロセスのPIDだけを表示します。
主なオプション
-l | PIDとプロセス名を表示する |
|---|---|
-a | PIDとコマンドライン全体を表示する |
-x | プロセス名が完全に一致するものだけを対象にする |
-f | プロセス名ではなくコマンドライン全体と照合する |
-u ユーザー | 指定したユーザーのプロセスだけを対象にする |
-c | 一致した数を表示する |
-o / -n | 最も古い(-o)、または最も新しい(-n)ものだけを表示する |
解説
PID を取り出すためのコマンド
pgrep は、条件に合うプロセスの PID を1行に1つずつ表示します。ps -ef | grep で探すより簡単で、grep 自身が混ざることもありません。結果をそのまま kill $(pgrep ...) のように他のコマンドに渡せます。
部分一致と完全一致
既定では、プロセス名に指定した文字列が含まれていれば一致します。pgrep ssh は sshd にも当たります。完全に一致するものだけにしたいときは -x を付けます。
-f を使うときの注意
-f を付けるとコマンドライン全体と照合するので、引数でプロセスを区別できます。ただし、pgrep -f sleep のように書くと、pgrep -f sleep を実行しているシェルのコマンドラインにも sleep が含まれ、意図しないものが当たることがあります。'^sleep 100002' のように、先頭を示す ^ で絞ると安全です。パターンは正規表現です。
終了コード
一致するプロセスがあれば終了コード 0、1つもなければ 1 を返します。スクリプトの中で、プロセスが動いているかの判定に使えます。
pgrep と pkill は、同じ条件の指定方法を使います。まず pgrep -a で対象を確かめてから pkill に同じ条件を渡すと、安全です。