killall 名前が一致するプロセスすべてにシグナルを送る
killall [オプション] 名前...試してみる
pgrep -c -x sleep終了させる前に、sleep が何個動いているかを数えます。
killall -0 sleepシグナル 0 は何も送らず、その名前のプロセスがあるかどうかだけを調べます。
killall -v sleep名前が sleep のプロセスすべてに SIGTERM を送ります。-v で結果を表示します。
sleep 1; pgrep -c -x sleep || echo なくなりましたsleep がなくなったことを確認します。
killall -v -s KILL napperシグナルを名前で指定して、napper を強制終了します。
killall -l | head -3使えるシグナル名の一覧を表示します(先頭の数行だけ)。
主なオプション
-シグナル / -s シグナル | 送るシグナルを指定する。省略すると SIGTERM |
|---|---|
-v | シグナルを送れたかどうかを表示する |
-u ユーザー | 指定したユーザーのプロセスだけを対象にする |
-i | 1つずつ確認してから送る |
-w | 対象のプロセスが終了するまで待つ |
-l | シグナル名の一覧を表示する |
解説
名前でまとめて止める
killall は、プロセス名が一致するプロセスすべてにシグナルを送ります。同じプログラムが複数動いているとき、PID を1つずつ調べずに済みます。シグナルを指定しなければ、SIGTERM(15)です。
名前は完全一致
killall sleep は、名前がちょうど sleep のプロセスだけが対象です。pkill の既定のような部分一致はしません。長い名前は、先頭15文字で照合されます。
一致するものがないとき
該当するプロセスが1つもないと、sleep: no process found と表示して終了コード 1 を返します。
他のシステムでの注意
Linux の killall は、ここで説明した名前一致のコマンドです。一方、Solaris などの一部のUNIXでは、killall がシステム上のすべてのプロセスを終了させる別のコマンドです。Linux の感覚で他のUNIXで実行しないよう注意してください。
kill / pkill との使い分け
PID が分かっているなら kill、名前で選ぶなら killall か pkill です。killall は完全一致で安全、pkill は条件を柔軟に組み合わせられます。