utte

pgrep 名前などの条件に合うプロセスのPIDを表示する

pgrep [オプション] パターン

試してみる

主なオプション

-lPIDとプロセス名を表示する
-aPIDとコマンドライン全体を表示する
-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 に同じ条件を渡すと、安全です。

このコマンドを使う問題

  1. pgrepでプロセスのPIDを調べる
  2. killでバックグラウンドのプロセスを終了する

関連するコマンド

LinuC 101の出題範囲