pgrep -f コマンド情報まとめ
LinuxやmacOSのコマンド、 pgrep -f について、オプション詳細、ps | grepとの違いやAIエージェントが実行しようとした場合の危険性などについて紹介しています。
pgrep -f とは
pgrep -f(process grep full match)は、実行中のプロセスをコマンドライン全体にマッチするパターンで検索し、該当するプロセスのPIDを出力するコマンドです。通常の pgrep がプロセス名(先頭15文字)にしかマッチしないのに対し、-f オプションを付けるとコマンドライン引数も含めた文字列全体を検索対象にします。
オプション「-f」の意味
| オプション | 意味 |
|---|---|
-f | プロセス名だけでなく、コマンドライン全体(引数を含む)をパターンマッチの対象にする |
-l | PIDだけでなく、プロセス名も一緒に表示する |
-a | PIDとコマンドライン全体を表示する(Linuxのみ) |
-x | パターンがプロセス名(または -f 指定時はコマンドライン)に完全一致する場合のみマッチする |
-u | 指定したユーザーが所有するプロセスのみ対象にする |
-n | マッチしたプロセスのうち最も新しいものだけを返す |
-f は「full command line」を意味するオプションです。PHPワーカーやPythonスクリプトのように、実行ファイル名だけでは区別できないプロセスを特定したいときに特に役立ちます。
よく使う組み合わせ
PHPプロセスのPIDを一覧表示する
pgrep -f php
コマンドラインに “php” を含む全プロセスのPIDを1行ずつ表示します。php-fpm ワーカーや php artisan などの派生プロセスもまとめて検索できます。
PIDとコマンドラインをセットで確認する
pgrep -fa php
-a を加えると、PIDの横にコマンドライン全体も表示されます。複数の php プロセスがどのような引数で起動しているかを一目で把握できます(Linux限定)。
マッチしたプロセスをまとめて終了させる
pgrep -f php | xargs kill
xargs kill にパイプで渡すことで、検索結果のPIDをまとめてシグナル送信できます。デフォルトは SIGTERM(15)です。強制終了したい場合は xargs kill -9 を使いますが、影響範囲をあらかじめ pgrep -fa php で確認してから実行することを推奨します。
特定スクリプトを実行中か確認する(終了コードを利用)
pgrep -f "php artisan queue:work" > /dev/null && echo "running" || echo "not running"
pgrep はプロセスが見つかった場合に終了コード 0 を返します。この性質を利用して、特定プロセスの稼働状態をシェルスクリプトの条件分岐として使えます。
自分自身を除いて検索する
pgrep -f php | grep -v $$
スクリプト内で pgrep -f を実行すると、スクリプト自身がマッチする場合があります。grep -v $$(現在のシェルのPID)を組み合わせることで自己参照を除外できます。
pgrep -f と ps | grep の違い
どちらも実行中のプロセスを文字列で検索できますが、以下の違いがあります。
| 項目 | pgrep -f | ps aux | grep |
|---|---|---|
| 出力内容 | PIDのみ(デフォルト) | プロセスの全情報(CPU・メモリ等) |
| grep自身がヒットする問題 | 発生しない | 発生する(grep -v grep が必要) |
| スクリプトでの扱いやすさ | PIDが直接取れるため扱いやすい | awk等で加工が必要 |
| 終了コードの活用 | 見つかれば0、見つからなければ1を返す | grepの終了コードに依存 |
| macOS対応 | 対応(-a は非対応) | 対応 |
PIDだけ取得してシグナルを送ったり条件分岐に使ったりする場合は pgrep -f が適しています。一方、CPU使用率やメモリ使用量など詳細な情報も一緒に確認したい場合は ps aux | grep の方が向いています。
ユースケース
デプロイスクリプトでワーカーの再起動を行う
# キューワーカーが起動中なら停止してから再起動
if pgrep -f "php artisan queue:work" > /dev/null; then
pgrep -f "php artisan queue:work" | xargs kill
sleep 1
fi
php artisan queue:work &
デプロイ時にキューワーカーを安全に再起動するスクリプトの例です。pgrep -f の終了コードで稼働確認し、起動中であれば停止してから再起動します。
監視スクリプトでプロセスの生死を定期チェックする
#!/bin/bash
# /etc/cron.d/php-worker-watch として登録する例
if ! pgrep -f "php worker.php" > /dev/null; then
echo "$(date): php worker.php が停止しています。再起動します。" >> /var/log/worker-watch.log
/usr/bin/php /opt/app/worker.php &
fi
cronで定期実行し、プロセスが落ちていたら自動再起動するシンプルなウォッチドッグスクリプトです。pgrep -f が終了コード 1(見つからない)を返したときだけ再起動処理を行います。
特定ユーザーの php プロセスだけを対象にする
pgrep -f -u www-data php
マルチユーザー環境では -u オプションで所有ユーザーを絞り込めます。Webサーバーの実行ユーザー(www-data など)に限定することで、意図しないプロセスへの影響を防ぎます。
AIエージェントが実行しようとした場合
pgrep -f コマンド自体はプロセスのPIDを読み取るだけで、システムに変更を加えない安全なコマンドです。
AIエージェントが実行しても問題ありません。
ただし、pgrep -f の結果を xargs kill や pkill -f にパイプで渡すワンライナーの場合は、プロセスの強制終了を伴うため、AI Agentが自動実行する前に対象プロセスを人間が確認することを推奨します。