utte

pkill 名前などの条件に合うプロセスにシグナルを送る

pkill [オプション] パターン

試してみる

主なオプション

-シグナル送るシグナルを指定する(-9、-HUP など)。省略すると SIGTERM
-xプロセス名が完全に一致するものだけを対象にする
-fプロセス名ではなくコマンドライン全体と照合する
-u ユーザー指定したユーザーのプロセスだけを対象にする
-n一致したうち、最も新しく起動したものだけを対象にする
-o一致したうち、最も古く起動したものだけを対象にする
-t 端末指定した端末のプロセスだけを対象にする

解説

pkill は部分一致

pkill パターン は、プロセス名にパターンを含むプロセスすべてに、シグナルを送ります。部分一致なので、pkill ssh は sshd や ssh-agent にも当たります。誤爆を避けるには、まず pgrep -a で同じ条件を使って対象を確認します。名前を完全一致にしたいときは -x を付けます。

名前か、コマンドライン全体か

既定で照合するのは、プロセス名(ps の COMM 列にあたる、先頭15文字まで)だけです。引数の違いで区別したいときは -f を使うと、sleep 100001 のようなコマンドライン全体と照合します。-f では、パターンが正規表現として扱われます。

kill との違い

kill は PID を指定しますが、pkill は名前や所有者などの条件で選びます。シグナルの指定の書き方は kill と同じです。何も指定しなければ SIGTERM(15)が送られます。一致するプロセスが1つもないと、終了コード 1 を返します。

killall との違い

killall は名前が完全に一致するプロセスが対象です。pkill は既定では部分一致で、-u や -t などの条件も組み合わせられます。

このコマンドを使う問題

  1. 終了要求を無視するプロセスをSIGKILLで止める

関連するコマンド

LinuC 101の出題範囲