Linuxで「このプログラム、本当に動いているかな?」と思ったとき、ps -ef | grepを実行して確認した経験がある方は多いでしょう。
しかし、この方法ではgrepコマンド自身まで表示されたり、コマンドが長くなったりと少し手間がかかります。
そんなときに便利なのがpgrepコマンドです。
pgrepコマンドを使えば、プロセス名から簡単にPID(プロセスID)を検索できます。
シェルスクリプトやサーバー監視でも利用されることが多く、Linux管理者であればぜひ覚えておきたいコマンドの一つです。
この記事では、Linux初心者向けにpgrepコマンドの基本的な使い方、代表的なオプション、psコマンドとの違い、実践的な活用例まで分かりやすく解説します。
pgrepコマンドとは
pgrepは、指定した名前に一致するプロセスを検索し、そのPIDを表示するコマンドです。
「Process Grep」の名前どおり、プロセス検索に特化しています。
例えば、NginxやApache、MySQLなどのサービスが起動しているかを確認したい場合に非常によく利用されます。
また、killやpkillなどと組み合わせることで、プロセス管理を効率化できます。
pgrepコマンドの基本構文
pgrep [オプション] プロセス名
最も基本的な使い方は次のとおりです。
pgrep nginx
実行結果
1514
1515
一致したプロセスのPIDだけが表示されます。
ps -ef | grepのように不要な情報が表示されないため、とても見やすいのが特徴です。
プロセスが存在しない場合
検索したプロセスが存在しない場合は、何も表示されません。
pgrep sample
実行結果
(何も表示されない)
終了ステータスは1になるため、シェルスクリプトでは存在確認にも利用できます。
プロセス名とPIDを同時に表示する
PIDだけでは分かりにくい場合は、-lオプションを使用します。
pgrep -l nginx
実行例
1514 nginx
1515 nginx
PIDとプロセス名を同時に確認できるため、普段はこちらを使う方も多くいます。
実行コマンドまで表示する
実際に実行されているコマンドラインを確認したい場合は、-aオプションを利用します。
pgrep -a nginx
実行例
1514 nginx: master process /usr/sbin/nginx
1515 nginx: worker process
どのオプションで起動しているか確認したい場合にも便利です。
完全一致で検索する
通常は部分一致で検索されます。
完全一致で検索したい場合は、-xオプションを使用します。
pgrep -x nginx
例えば「nginx」と「nginx-helper」のようなプロセスが存在する場合でも、完全一致したものだけ検索できます。
指定したユーザーのプロセスだけ検索する
-uオプションを利用すると、特定ユーザーが実行しているプロセスだけ検索できます。
pgrep -u root nginx
現在ログインしているユーザーだけ検索したい場合は、次のようにも実行できます。
pgrep -u "$USER"
共有サーバーや複数ユーザー環境でよく利用されるオプションです。
複数条件で検索する
ユーザーや名前など、複数条件を組み合わせて検索することも可能です。
pgrep -u root -x sshd
この例では、rootユーザーが実行している「sshd」だけが検索対象になります。
親プロセスを指定して検索する
親プロセスのPIDを指定して、その子プロセスだけ表示することもできます。
pgrep -P 1234
子プロセスを確認したい場合や、サービスが生成したワーカープロセスを調査したい場合に便利です。
最新のプロセスだけ取得する
同じ名前のプロセスが複数ある場合は、-nオプションで最新のプロセスだけ取得できます。
pgrep -n nginx
逆に、最も古いプロセスだけ取得したい場合は-oを使用します。
pgrep -o nginx
検索結果の件数を数える
一致したプロセス数を確認したい場合は、-cオプションを利用します。
pgrep -c nginx
実行例
2
サービスが何個起動しているか確認するときにも便利です。
プロセス名ではなくコマンドライン全体から検索する
通常のpgrepはプロセス名を対象に検索します。
コマンドライン全体を検索対象にしたい場合は、-fオプションを利用します。
pgrep -f "python app.py"
PythonやJavaなど、実行ファイル名だけでは判別しにくい場合によく利用されます。
シェルスクリプトでプロセスの有無を判定する
pgrepコマンドは終了ステータスを返すため、シェルスクリプトとの相性が非常に良いコマンドです。
if pgrep nginx > /dev/null; then
echo "nginxは起動しています"
else
echo "nginxは停止しています"
fi
監視スクリプトや自動復旧処理でもよく利用されています。
psコマンドとの違い
| コマンド | 用途 |
|---|---|
ps |
プロセス一覧を表示する |
pgrep |
プロセス名からPIDを検索する |
例えば、プロセス全体を確認したい場合はps、特定のプロセスが起動しているか確認したい場合はpgrepが適しています。
ps -ef | grepとの違い
以前からよく使われている方法として、次のコマンドがあります。
ps -ef | grep nginx
しかし、この方法ではgrepコマンド自身まで検索結果に表示されることがあります。
root 2301 2280 grep nginx
一方、pgrepでは必要なPIDだけ表示されます。
pgrep nginx
1514
1515
コマンドも短く、シェルスクリプトでも扱いやすいため、現在はこちらを利用する機会が増えています。
pkillとの違い
pgrepと名前が似ているコマンドとして、pkillがあります。
| コマンド | 役割 |
|---|---|
pgrep |
プロセスを検索する |
pkill |
検索したプロセスを終了する |
例えば、PIDだけ確認したい場合はpgrepを使用します。
pgrep nginx
検索したプロセスを終了したい場合は、次のように実行します。
pkill nginx
重要なサービスを誤って停止しないよう、まずはpgrepで確認してから操作することをおすすめします。
よく利用するオプション一覧
| オプション | 説明 |
|---|---|
-l |
PIDとプロセス名を表示 |
-a |
コマンドライン全体を表示 |
-f |
コマンドライン全体から検索 |
-x |
完全一致で検索 |
-u |
指定ユーザーのみ検索 |
-P |
親プロセスを指定 |
-n |
最新のプロセスを取得 |
-o |
最も古いプロセスを取得 |
-c |
一致件数を表示 |
よくあるエラー
何も表示されない
対象プロセスが存在しない可能性があります。
プロセス名が正しいか確認してみましょう。
期待したプロセスが見つからない
実行ファイル名ではなく、コマンドライン全体で検索したい場合は-fを利用してください。
pgrep -f "python app.py"
複数のPIDが表示される
同じプログラムが複数起動している状態です。
1件だけ取得したい場合は-nまたは-oを利用すると便利です。
よくある質問
pgrepはgrepより便利ですか?
プロセス検索だけが目的であれば、pgrepの方がシンプルです。
PIDだけ取得できるため、シェルスクリプトでも扱いやすくなります。
pgrepはPIDしか表示できませんか?
いいえ。
-lでプロセス名、-aでコマンドライン全体も表示できます。
プロセスが存在するかだけ確認できますか?
はい。
終了ステータスを利用すれば、シェルスクリプトで簡単に判定できます。
pkillとの違いは何ですか?
pgrepは検索、pkillは終了を行うコマンドです。
まずpgrepで確認し、その後pkillやkillを実行する流れが安全です。
リアルタイム監視はできますか?
できません。
まとめ
pgrepコマンドは、Linuxでプロセス名からPIDを検索するための便利なコマンドです。
特に次のコマンドは覚えておくと役立ちます。
| コマンド | 用途 |
|---|---|
pgrep nginx |
PIDを検索 |
pgrep -l nginx |
PIDとプロセス名を表示 |
pgrep -a nginx |
コマンドライン全体を表示 |
pgrep -f "python app.py" |
コマンドライン全体から検索 |
pgrep -c nginx |
一致件数を表示 |
pgrep -u root nginx |
指定ユーザーのみ検索 |
障害対応では、「プロセスが起動しているか確認したい」という場面が非常によくあります。
そのような場合は、ps -ef | grepよりもシンプルに検索できるpgrepを活用すると、調査やシェルスクリプトの作成がより効率的になります。




コメント