pgrepコマンドとは?Linuxでプロセスを名前から検索する方法

Linux

Linuxで「このプログラム、本当に動いているかな?」と思ったとき、ps -ef | grepを実行して確認した経験がある方は多いでしょう。

しかし、この方法ではgrepコマンド自身まで表示されたり、コマンドが長くなったりと少し手間がかかります。

そんなときに便利なのがpgrepコマンドです。

pgrepコマンドを使えば、プロセス名から簡単にPID(プロセスID)を検索できます。

シェルスクリプトやサーバー監視でも利用されることが多く、Linux管理者であればぜひ覚えておきたいコマンドの一つです。

この記事では、Linux初心者向けにpgrepコマンドの基本的な使い方、代表的なオプション、psコマンドとの違い、実践的な活用例まで分かりやすく解説します。

pgrepコマンドとは

pgrepは、指定した名前に一致するプロセスを検索し、そのPIDを表示するコマンドです。

「Process Grep」の名前どおり、プロセス検索に特化しています。

例えば、NginxやApache、MySQLなどのサービスが起動しているかを確認したい場合に非常によく利用されます。

また、killpkillなどと組み合わせることで、プロセス管理を効率化できます。

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を実行する流れが安全です。

リアルタイム監視はできますか?

できません。

リアルタイム監視にはtophtopを利用してください。

まとめ

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を活用すると、調査やシェルスクリプトの作成がより効率的になります。

コメント

タイトルとURLをコピーしました