Linux / コマンド / killall - 名前が同じプロセスにシグナルを送る

Linuxのkillallは、指定した名前と一致するプロセスにシグナルを送ります。デフォルトはSIGTERMで、同じ名前のプロセスが複数ある場合はすべて対象になることがあります。

Linuxのプロセス管理ツール集psmiscに含まれる実装を説明します。ほかのUnix系ではkillallの意味が異なる場合があるため、システムを移行して使用する際は必ず現行のマニュアルを確認してください。対象の選定はpgrepでまず確認します。

基本的な文法

killall [オプション] 名前 ...

インストールされている実装とオプションは、配布版によって異なる場合があります。man killallで現在のシステムの説明を確認してください。

使用例

同名プロセスの確認

myworker は既に起動している自分の実習用アプリ名の例です。pgrepのPID(プロセス識別番号)・コマンドライン表示 で全候補を確認します。以下は独立した使い方の例であり、同じ対象へ続けて実行する必要はありません。

pgrep -a -x myworker

正常終了要求

Linux psmiscの実装では、名前が一致するプロセスにSIGTERMを送ります。

killall -TERM myworker

対象の名前とユーザー制限

alice を実在する対象ユーザーへ置き換えます。先に pgrep -a -u alice -x myworker で、ユーザーを含めて対象を確認してください。

killall -u alice myworker

同じ名前のプロセスが複数ある場合

killallは指定した名前と一致するプロセス全体にシグナルを送ることができます。まずpgrepで候補を確認して、予期しないインスタンスを終了させないようにします。

pgrep -a -x demo-worker
killall -TERM demo-worker

最初のコマンドは対象のPIDとコマンドラインを表示し、2番目のコマンドは成功しても通常は出力しません。その後、pgrep -a -x demo-workerで残りのプロセスを確認してください。同じ名前の作業が複数ある場合、すべてに影響が及ぶ可能性があります。

例の名前は自分で作成したテストプロセスに置き換えて使用してください。一部のUnix系のkillallはLinuxと動作が異なるため、移植性を前提にしないでください。サービス管理の対象であれば、プロセスを直接終了するよりsystemctl stop サービス名の方が適している場合があります。

主なオプションと形式

オプション・形式 説明
-s シグナル 送るシグナルを指定します。
-u ユーザー 指定したユーザーのプロセスのみを選択します。
-i 対象ごとに確認を求めます。
-v シグナルを正常に送信できたかを詳しく表示します。
-w シグナルを送ったプロセスが消えるまで待ちます。終了しなければ無期限に待つ場合があります。

使用する際の注意点

名前で複数のプロセスが対象になるため、PIDを指定するkill と使い分けます。psmiscのkillallは通常の名前指定を文字列として扱い、-r で正規表現にします。一方pgrepは正規表現であり、長い名前の扱いにも違いがあるため、両者が常に同じ候補を選ぶとは限りません。長い名前の厳密な照合は手元の -e の説明も確認します。-w はタイムアウトを指定する機能ではなく、シグナル無視やゾンビ状態などで戻らない場合があります。表示された送信成功と終了完了は別に確認します。

よくある質問

killallはシステムのすべてのプロセスを終了しますか?

ここで示すLinux psmiscの名前指定では、指定名に一致するプロセスが対象です。ただし -u ユーザー で名前を省略すると、そのユーザーのプロセス全体が対象になる場合があります。他のUnix系ではコマンドの意味自体が異なることもあるため、Linuxの例をそのまま適用しないでください。

公式ドキュメント

オプションの正確な動作と実装ごとの差異は、killall関連公式ドキュメントで確認できます。