目次
概要
本記事では、特定の条件に一致するプロセスを検索し、そのプロセス ID (PID) を表示できる pgrep
コマンドについて解説します。
基本的な使い方
pgrep
コマンドの基本的な使用方法は、単に検索したいプロセス名を引数として指定することです。
pgrep プロセス名
例えば、sshd
プロセスの PID を検索するには、次のようにします。
pgrep sshd
プロセス名に関する注意点
プロセス名はコマンド名ともいいます。 Linux カーネルから見たコマンド名は、実行ファイルの basename の最初の 15 バイトです。 そのため、15 バイトを超える場合は途中で切り捨てられます。
long_process_name_script.sh
という名前のスクリプトを作成して、実行します。
#!/bin/bash
sleep infinity
chmod +x long_process_name_script.sh
./long_process_name_script.sh &
pgrep で検索する際に pgrep -l long_process_name_script
で検索してもマッチしません。なぜなら、プロセス名は long_process_na
という 15 文字になっているからです。15 文字以上のコマンド全体をマッチ対象としたい場合は -f
オプションを指定します。
$ pgrep -l long_process_name_script
# 表示されない
$ pgrep -fl long_process_na
118332 long_process_na
$ pgrep -fl long_process_name_script
118332 long_process_na
オプションの一覧
以下に主要なオプションを示します:
マッチングに関するオプション
オプション | 説明 |
---|---|
-g, --pgroup <PGID,...> |
指定されたプロセスグループ ID をマッチングする |
-U, --uid <ID,...> |
指定された実ユーザー ID でマッチングする |
-u, --euid <ID,...> |
指定された有効ユーザー ID でマッチングする |
-G, --group <GID,...> |
指定された実グループ ID をマッチングする |
-P, --parent <PPID,...> |
指定された親プロセスの子プロセスのみをマッチングする |
-s, --session <SID,...> |
指定されたセッション ID をマッチングする |
-t, --terminal <tty,...> |
指定されたターミナルでマッチングする |
-x, --exact |
指定されたコマンド名と正確に一致させてマッチングする |
-r, --runstates <state> |
指定された実行状態 [D,S,Z,…] をマッチングする |
--ns <PID> |
指定された PID と同じ名前空間に属するプロセスをマッチングする |
-v, --inverse |
マッチング条件にマッチしない一覧を表示する |
-f, --full |
完全なプロセス名を使用してマッチングする |
-i, --ignore-case |
大文字小文字を区別せずにマッチングする |
-n, --newest |
最も最近開始されたプロセスを選択する |
-o, --oldest |
最も古く開始されたプロセスを選択する |
表示に関するオプション
オプション | 説明 |
---|---|
-d, --delimiter <string> |
出力区切り文字を指定する |
-l, --list-name |
PID とプロセス名を一覧表示する |
-a, --list-full |
PID と完全なコマンドを一覧表示する |
-w, --lightweight |
すべての TID を一覧表示する |
-c, --count |
マッチングしたプロセスの数を表示する |
-F, --pidfile <file> |
ファイルから PID を読み取る |
-L, --logpidfile |
PID ファイルがロックされていない場合は失敗する |
--nslist <ns,...> |
--ns オプションで考慮される名前空間を一覧表示する (ipc, mnt, net, pid, user, uts のいずれか) |
使用例
-l (リスト表示)
プロセス ID とプロセス名を表示します。
pgrep -l sshd
-u (ユーザー指定)
特定のユーザーが所有するプロセスを検索します。ユーザー名または UID を指定できます。
pgrep -u username sshd
-f (コマンドライン全体で検索)
プロセス名だけでなく、コマンドライン全体を対象に検索します。
pgrep -f "/usr/sbin/sshd"
-c (一致するプロセス数を表示)
一致するプロセスの数を表示します。
pgrep -c sshd
-d (区切り文字を指定)
出力される PID の区切り文字を指定します。デフォルトは改行ですが、カンマなどに変更できます。
pgrep -d ',' sshd
-n (最新のプロセス)
一致するプロセスの中で最も新しいプロセス ID を表示します。
pgrep -n sshd
-o (最古のプロセス)
一致するプロセスの中で最も古いプロセス ID を表示します。
pgrep -o sshd
コメント