Linux pgrep コマンド
pgrep は Linux システムで非常に便利なプロセス検索ツールで、procps または procps-ng パッケージの一部です。このコマンド名は "process grep" に由来しており、その名の通り、grep コマンドがテキストを検索するように、システム内のプロセスを検索することができます。
pgrep の主な機能は、指定した条件に基づいて実行中のプロセスを検索し、それらのプロセスの PID(プロセス ID)を返すことです。従来の ps コマンドと grep を組み合わせる方法と比べて、pgrep はより簡潔で効率的です。
pgrep 基本構文
pgrep コマンドの基本構文は次のとおりです:
pgrep [选项] [匹配模式]
ここで:
オプション:検索条件や出力形式を指定する各種オプション一致モード:プロセス名をマッチングする正規表現パターン
よく使うオプションとパラメータ
pgrep には検索動作を細かく制御するためのさまざまなオプションがあります。以下はよく使うオプションです:
| オプション | 説明 |
|---|---|
-l |
プロセス名と PID を同時に表示 |
-a |
プロセス名だけでなく完全なコマンドラインを表示 |
-f |
プロセス名だけでなく完全なコマンドライン(引数を含む)をマッチ |
-u |
指定したユーザーが所有するプロセスのみをマッチ |
-x |
プロセス名全体を完全一致でマッチ |
-n |
最新(最後に起動した)のマッチするプロセスのみ表示 |
-o |
最古(最初に起動した)のマッチするプロセスのみ表示 |
-c |
マッチしたプロセス数のみを返し、PID は表示しない |
-d |
出力の区切り文字を指定(デフォルトは改行) |
-P |
指定した親プロセス ID の子プロセスのみをマッチ |
-g |
指定したプロセスグループ ID のプロセスのみをマッチ |
-t |
指定した端末(tty)で実行中のプロセスのみをマッチ |
使用例
基本的なプロセス検索
"nginx" という名前のすべてのプロセスを検索:
pgrep nginx
このコマンドは、プロセス名に "nginx" を含むすべてのプロセス ID を返します。
プロセス名を表示
"ssh" プロセスを検索してプロセス名を表示:
pgrep -l ssh
出力例:
1234 sshd 5678 ssh-agent
プロセス名を完全一致で検索
完全な名前が "bash" のプロセスのみをマッチ("bashrc" などは含めない):
pgrep -x bash
完全なコマンドラインをマッチ
特定の引数を含むプロセスを検索します。例えば、特定のポートを使用する sshd プロセスを検索する場合:
pgrep -f "sshd -p 2222"
ユーザーでフィルタリング
ユーザー "www-data" が実行しているすべてのプロセスを検索:
pgrep -u www-data
条件を組み合わせた検索
ユーザー "mysql" が実行している "mysqld" という名前のプロセスを検索:
pgrep -u mysql mysqld
プロセス数をカウント
実行中の "chrome" プロセスの数をカウント:
pgrep -c chrome
最新/最古のプロセスを検索
最後に起動した "python" プロセスを検索:
pgrep -n python
最初に起動した "python" プロセスを検索:
pgrep -o python
応用的な使い方
pkill と組み合わせて使う
pgrep は pkill コマンドと組み合わせて使われることがよくあります。まず pgrep で終了させるプロセスを確認し、問題がないことを確認してから pkill を使用します:
例
pgrep -l apache2
# 確認後、これらのプロセスを終了
pkill apache2
カスタム区切り文字を使う
デフォルトでは、pgrep は複数の PID を改行で区切ります。カンマ区切りに変更できます:
pgrep -d, nginx
出力例:
1234,5678,9012
特定の端末で実行中のプロセスを検索
tty1 端末で実行中のすべてのプロセスを検索:
pgrep -t tty1
子プロセスを検索
PID 1234 のプロセスのすべての子プロセスを検索:
pgrep -P 1234
よくある質問(FAQ)
pgrep と ps | grep の違いは何ですか?
- 効率:pgrep はカーネルのプロセス情報を直接参照するため、ps | grep より効率的です
- 安全性:pgrep は自身のプロセスにはマッチしませんが、ps | grep は grep プロセス自体にマッチする可能性があります
- 機能:pgrep にはより専門的なプロセス検索オプションが用意されています
pgrep が実行中のプロセスを見つけられないことがあるのはなぜですか?
考えられる原因:
- プロセス名のスペルミス
- 使用していない
-f完全なコマンドラインをマッチするオプション - プロセスが他のユーザーに属しており、表示する十分な権限がない
- プロセスがすでに終了している
pgrep のバージョンを確認するには?
pgrep -V
実際の活用シーン
サービスの状態を監視する
スクリプト内で特定のサービスが実行中かどうかを確認する:
例
echo "Nginx is running"
else
echo "Nginx is not running"
fi
プロセスを一括操作する
すべての Java プロセスの PID を取得して操作を実行する:
例
echo "Processing Java process $pid"
# その他の操作...
done
システムリソースの監視
特定の種類のプロセスの数とリソース使用量を集計する:
例
memory=$(ps -o rss= -p $(pgrep chrome) | awk '{sum+=$1} END {print sum}')
echo "Chrome processes: $count, Total memory: ${memory}KB"
まとめ
pgrep は Linux システム管理において強力かつ効率的なツールであり、プロセスの検索と管理の操作を簡素化します。pgrep のさまざまなオプションと使い方を習得することで、次のことができます:
- 特定のプロセスを迅速かつ正確に特定する
- より信頼性の高いシステム管理スクリプトを作成する
- 日常のシステムメンテナンス作業の効率を向上させる
覚えておいてください。pgrep でプロセスを検索した後、特にプロセスを終了させる準備をする際は、見つけたプロセスが正しいことを必ず確認して、重要なサービスを誤って終了させないようにしてください。
その他の拡張