Linux / コマンド / pgrep - 条件に合ったプロセスIDを検索

pgrepはプロセス名やユーザーなどの条件で実行中のプロセスIDを探します。対象PIDを確認するコマンドであり、それ自体でプロセスを終了することはありません。

パターンはプロセス名に対する拡張正規表現です。grepの正規表現 と同様に、記号にも意味があるため、シェルの展開を避ける引用符も必要に応じて使います。名前全体を正規表現に一致させる場合は -x、全コマンドラインまで確認するには-fを使用します。-fはより広く一致する可能性があるため、結果を必ず確認してください。

基本的な文法

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

インストールされている実装とオプションは、配布版によって異なる場合があります。man pgrepで現在のシステムの説明を確認してください。

使用例

名前でPID検索

一致するPIDを行ごとに出力します。

pgrep sshd

PIDとコマンドラインを一緒に表示

どの作業が選ばれたか表示してミスを減らします。

pgrep -a sshd

ユーザーと正確な名前で制限

alice を実在する対象ユーザーへ置き換え、実効ユーザーがそのユーザーで、名前全体が python3 に一致するプロセスへ絞ります。

pgrep -u alice -x python3

検索結果がPIDで表示される理由

pgrepは条件に合うプロセスのPIDを出力します。-aを使うとPIDと全コマンドラインを一緒に表示して確認しやすくなります。

pgrep -a sshd

例の出力(当該プロセスが実行中のシステムで):

1234 /usr/sbin/sshd -D

何も表示されない場合は、一致するプロセスがないか、検索権限・条件の問題である可能性があります。基本検索はプロセス名を対象としており、全コマンドラインまで検索したい場合は-fを使用します。広いパターンは予期しないプロセスを含む可能性があるため、終了コマンドに渡す前に結果を確認してください。

主なオプションと形式

オプション・形式 説明
-a PIDと全コマンドラインを一緒に表示します。
-x プロセス名全体がパターンに一致する必要があります。
-f プロセス名の代わりに全コマンドラインを検査します。
-u ユーザー 実効ユーザーIDで範囲を制限します。
-n / -o 最新または最も古い一致を一つ選びます。

使用する際の注意点

Linuxのプロセス名とコマンドラインは別です。procps-ngの名前検索には通常、/proc/PID/stat の15バイト(ASCII文字なら15文字)の名前が使われるため、長い名前では全コマンドラインを調べる -f を検討します。ただし -a は表示を詳しくする指定であり、検索対象を変える -f とは異なります。-x を付けても正規表現の記号が無効になるわけではありません。得たPIDを後の操作に使う前に、psによるPIDとコマンドの確認 も行います。

よくある質問

pgrepの結果がない場合、それはエラーですか?

procps-ngのpgrepでは、1件以上一致すれば終了状態0、一致がなければ1です。構文エラーの2や致命的エラーの3とは区別します。ただし対象が見えない理由は条件や実行環境にもあるため、「見つからない」だけでサービス停止と断定しません。

公式ドキュメント

オプションや終了状態は、procps-ngの公式pgrep・pkillマニュアル で確認できます。