pgrep、pkill、pidwait - 名前やその他の属性に基づいてプロセスを検索、シグナル送信、または待機する
SYNOPSIS
pgrep [オプション] パターン
pkill [オプション] パターン
pidwait [オプション] パターン
DESCRIPTION
pgrep は、現在実行中のプロセスを検索し、選択基準に一致するプロセス ID を標準出力に出力します。すべての基準に一致する必要があります。たとえば、
$ pgrep -u root sshd
は、名前が sshd であり、所有者が root であるプロセスのみをリストします。一方、
$ pgrep -u root,daemon
は、所有者が root または daemon であるプロセスをリストします。
pkill は、指定されたシグナル(デフォルトは SIGTERM)を各プロセスに送信し、標準出力に出力する代わりにそのようにします。
pidwait は、各プロセスの標準出力へのリストの代わりに、各プロセスの完了を待ちます。
OPTIONS
-signal
--signal シグナル
各一致するプロセスに送信するシグナルを定義します。数値またはシンボリックなシグナル名を使用できます。pgrep または pidwait モードでは、長いオプションのみを使用でき、ユーザー空間のシグナルハンドラーが特定のシグナルに対して存在する場合に、--require-handler と組み合わせて使用した場合にのみ効果があります。
-c, --count
通常の出力を抑制し、代わりに一致するプロセスの数を表示します。一致するものがない場合(たとえば、0 を返す場合)、コマンドはゼロ以外の値を返します。pkill および pidwait の場合、カウントは一致するプロセスの数であり、正常にシグナルが送信されたプロセスまたは待機されたプロセスではありません。
-d, --delimiter 区切り文字
出力で各プロセス IDを区切るために使用する文字列を設定します(デフォルトは改行)。(pgrep のみ。)
-e, --echo
キルされたプロセスの名前と PID を表示します。(pkill のみ。)
-f, --full
通常、パターンはプロセス名に対してのみ一致します。-f が設定されている場合、完全なコマンド行が使用されます。
-g, --pgroup pgrp,...
リストされているプロセスグループ ID 内のプロセスのみに一致させます。プロセスグループ 0 は、pgrep、pkill、または pidwait の独自のプロセスグループに変換されます。
-G, --group gid,...
実際のグループ ID がリストされているプロセスのみに一致させます。数値またはシンボリックな値をどちらでも使用できます。
-i, --ignore-case
大文字と小文字を区別せずにプロセスに一致させます。
-l, --list-name
プロセス ID に加えて、プロセス名もリストします。(pgrep のみ。)
-a, --list-full
プロセス ID に加えて、完全なコマンド行もリストします。(pgrep のみ。)
-n, --newest
一致するプロセスの中で、最も新しい(最近開始された)プロセスのみを選択します。
-o, --oldest
一致するプロセスの中で、最も古い(最初に開始された)プロセスのみを選択します。
-O, --older 秒
指定よりも古いプロセスを選択します。
-P, --parent ppid,...
指定された親プロセス ID のプロセスのみを一致させます。
-s, --session sid,...
指定されたプロセスセッション ID のプロセスのみを一致させます。セッション ID 0 は、pgrep、pkill、または pidwait の自身のセッション ID に変換されます。
-t, --terminal term,...
指定された制御ターミナルのプロセスのみを一致させます。ターミナル名は、"/dev/" プレフィックスなしで指定する必要があります。
-u, --euid euid,...
指定された実効ユーザー ID のプロセスのみを一致させます。数値またはシンボリック値のいずれかを使用できます。
-U, --uid uid,...
指定された実際のユーザー ID のプロセスのみを一致させます。数値またはシンボリック値のいずれかを使用できます。
-v, --inverse
一致を反転します。このオプションは通常、pgrep または pidwait のコンテキストで使用されます。pkill のコンテキストでは、短いオプションが無効になっており、偶発的なオプションの使用を回避します。
-w, --lightweight
pgrep または pidwait のコンテキストでは、すべてのスレッド ID を PID ではなく表示します。pkill のコンテキストでは、このオプションは無効になっています。
-x, --exact
名前 (または -f が指定されている場合はコマンド行) がパターンと完全に一致するプロセスのみを一致させます。
-F, --pidfile ファイル
ファイルから PID を読み込みます。このオプションは、pgrep よりも pkill または pidwait の方が便利です。
-L, --logpidfile
pidfile (上記 -F を参照) がロックされていない場合は、エラーを返します。
-r, --runstates D,R,S,Z,...
プロセス状態に一致するプロセスのみを一致させます。
-A, --ignore-ancestors
pgrep、pkill、または pidwait のすべての祖先を無視します。たとえば、sudo や同様のツールで権限を昇格する場合に役立ちます。
-H, --require-handler
送信するシグナルに対してユーザー空間シグナルハンドラーが存在するプロセスのみを一致させます。
--cgroup 名前,...
指定されたコントロールグループ (cgroup) v2 名に一致します。cgroups(8) を参照してください。
--ns pid
同じ名前空間に属するプロセスに一致します。他のユーザーのプロセスに一致するには、root として実行する必要があります。どの名前空間に一致するかを制限する方法については、--nslist を参照してください。
--nslist 名前,...
指定された名前空間のみに一致します。利用可能な名前空間: ipc、mnt、net、pid、user、uts。
-q, --queue 値
[kill]({filename}../../kill)(2) ではなく sigqueue(3) を使用し、値引数は送信する整数を指定するために使用されます。受信プロセスが sigaction(2) を使用して SA_SIGINFO フラグでこのシグナルハンドラーをインストールした場合、これは si_value 構造体の si_value フィールドを介して取得できます。
-V, --version
バージョン情報を表示して終了します。
-h, --help
ヘルプを表示して終了します。
オペランド
パターン
プロセス名またはコマンド行に対して一致させる拡張正規表現を指定します。
例
例 1: 名前付きデーモンのプロセス ID を見つけます。
$ pgrep -u root named
例 2: syslog に構成ファイルを再読み込みさせます。
$ pkill -HUP syslogd
例 3: すべての xterm プロセスに関する詳細情報を表示します。
$ ps -fp $(pgrep -d, -x xterm)
例 4: すべての chrome プロセスに、より高い優先度を与えます。
$ renice +4 $(pgrep chrome)
終了ステータス
0 1つ以上のプロセスが条件に一致しました。 pkillおよびpidwaitの場合、1つ以上のプロセスに対して正常にシグナルが送信されたか、待機が完了している必要があります。
1 一致するプロセスが存在しないか、いずれのプロセスにもシグナルを送信できませんでした。
2 コマンドラインに構文エラーがあります。
3 致命的なエラー:メモリ不足など。
注意点
プロセス名として使用される文字列は、/proc/pid/statの出力に含まれる15文字に制限されます。 完全なコマンドラインである/proc/pid/cmdlineに対して照合するには、-fオプションを使用します。
スレッドは、親プロセスとは異なるプロセス名を持つ場合がありますが、コマンドラインは同じです。
pgrep、pkill、またはpidwaitを実行しているプロセスは、自身を一致するものとして報告することはありません。
-O --olderオプションは、/procがsubset=pidオプションでマウントされている場合、サイレントに失敗します。
バグ
-n、-o、-vオプションは組み合わせて使用できません。 これらを組み合わせる必要がある場合はお知らせください。
ゾンビプロセスも報告されます。
pidwaitは、Linux 5.3で初めて登場したpidfd_open(2)システムコールを必要とします。
関連項目
ps(1)、regex(7)、signal(7)、sigqueue(3)、killall(1)、skill(1)、kill(1)、kill(2)、cgroups(8)。
著者
Kjetil Torgrim Homme
バグ報告
バグ報告は、_宛にお送りください。