Linux pgrep コマンド

Linux コマンド大全


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 の違いは何ですか?

  1. 効率:pgrep はカーネルのプロセス情報を直接参照するため、ps | grep より効率的です
  2. 安全性:pgrep は自身のプロセスにはマッチしませんが、ps | grep は grep プロセス自体にマッチする可能性があります
  3. 機能:pgrep にはより専門的なプロセス検索オプションが用意されています

pgrep が実行中のプロセスを見つけられないことがあるのはなぜですか?

考えられる原因:

  1. プロセス名のスペルミス
  2. 使用していない-f完全なコマンドラインをマッチするオプション
  3. プロセスが他のユーザーに属しており、表示する十分な権限がない
  4. プロセスがすでに終了している

pgrep のバージョンを確認するには?

pgrep -V

実際の活用シーン

サービスの状態を監視する

スクリプト内で特定のサービスが実行中かどうかを確認する:

例

if pgrep -x "nginx" >/dev/null; then
    echo "Nginx is running"
else
    echo "Nginx is not running"
fi

プロセスを一括操作する

すべての Java プロセスの PID を取得して操作を実行する:

例

for pid in $(pgrep java); do
    echo "Processing Java process $pid"
    # その他の操作...
done

システムリソースの監視

特定の種類のプロセスの数とリソース使用量を集計する:

例

count=$(pgrep -c chrome)
memory=$(ps -o rss= -p $(pgrep chrome) | awk '{sum+=$1} END {print sum}')
echo "Chrome processes: $count, Total memory: ${memory}KB"

まとめ

pgrep は Linux システム管理において強力かつ効率的なツールであり、プロセスの検索と管理の操作を簡素化します。pgrep のさまざまなオプションと使い方を習得することで、次のことができます:

  1. 特定のプロセスを迅速かつ正確に特定する
  2. より信頼性の高いシステム管理スクリプトを作成する
  3. 日常のシステムメンテナンス作業の効率を向上させる

覚えておいてください。pgrep でプロセスを検索した後、特にプロセスを終了させる準備をする際は、見つけたプロセスが正しいことを必ず確認して、重要なサービスを誤って終了させないようにしてください。


Linux コマンド大全

その他の拡張