killall コマンド
プロセスIDではなく名前によってプロセスを終了させます。
概要
killall
コマンドは、指定されたコマンドを実行しているすべてのプロセスにシグナルを送信します。デフォルトでは、プロセスに終了を要求するTERMシグナルを送信します。プロセスIDが必要なkill
コマンドとは異なり、killall
はプロセス名を指定できるため、関連する複数のプロセスを一度に終了させることが容易になります。
オプション
-e, --exact
非常に長い名前に対して完全一致を要求します。コマンド名が15文字より長い場合、完全な名前が利用できないことがあり、killall
は通常、最初の15文字に一致するすべてのものを終了させます。このオプションを使用すると、そのようなエントリはスキップされます。
$ killall -e long_running_process_name
-I, --ignore-case
大文字と小文字を区別せずにプロセス名を一致させます。
$ killall -I firefox
-i, --interactive
各プロセスを終了させる前に確認を求めます。
$ killall -i chrome
Kill chrome(1234) ? (y/N) y
Kill chrome(5678) ? (y/N) n
-l, --list
既知のすべてのシグナル名を一覧表示します。
$ killall -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
-q, --quiet
プロセスが終了しなかった場合に警告を表示しません。
$ killall -q nonexistent_process
-r, --regexp
プロセス名を拡張正規表現として解釈します。
$ killall -r 'fire.*'
-s, --signal SIGNAL, -SIGNAL
TERMの代わりに特定のシグナルを送信します。シグナルは名前または番号で指定できます。
$ killall -s KILL firefox
$ killall -9 firefox # 上と同じ、シグナル番号を使用
-u, --user USER
指定されたユーザーが所有するプロセスのみを終了させます。
$ killall -u username firefox
-v, --verbose
シグナルが正常に送信されたかどうかを報告します。
$ killall -v firefox
Killed firefox(1234) with signal 15
-w, --wait
終了したすべてのプロセスが完全に終了するまで待機します。killallは1秒に1回、終了したプロセスがまだ存在するかどうかを確認し、残っているものがなくなった場合にのみ戻ります。
$ killall -w firefox
使用例
特定のアプリケーションのすべてのインスタンスを終了させる
$ killall firefox
プロセスを強制的に終了させる
$ killall -9 chrome
特定のユーザーが所有するプロセスを終了させる
$ killall -u john java
確認付きでプロセスを終了させる
$ killall -i node
Kill node(1234) ? (y/N) y
Kill node(5678) ? (y/N) n
ヒント:
重要なシステムでは確認を使用する
本番システムでプロセスを終了させる場合は、-i
(インタラクティブ)フラグを使用して各終了を確認し、重要なサービスの偶発的なシャットダウンを防ぎましょう。
強制終了は注意して使用する
-9
(KILL)シグナルは最後の手段として使用すべきです。これはプロセスがリソースをクリーンアップすることを許可しないため、データ破損や一時ファイルの残存を引き起こす可能性があります。
終了前に確認する
特にパターンマッチングを使用する場合は、killallを実行する前にps aux | grep [プロセス名]
を使用して、どのプロセスが影響を受けるかを確認してください。
完了を待つ
特にスクリプト内で、新しいプロセスを開始する前にプロセスが完全に終了したことを確認する必要がある場合は、-w
フラグを使用してください。
よくある質問
Q1. kill
とkillall
の違いは何ですか?
A. kill
はプロセスIDによってプロセスを終了させますが、killall
はプロセス名によってプロセスを終了させるため、複数のインスタンスを一度に終了させることができます。
Q2. プロセスを強制的に終了させるにはどうすればよいですか?
A. killall -9 プロセス名
またはkillall -s KILL プロセス名
を使用して、プロセスがキャッチまたは無視できないSIGKILLシグナルを送信します。
Q3. なぜkillall
がプロセスを終了させなかったのですか?
A. プロセスを終了させる権限がない場合(sudoを使用してみてください)、プロセス名のスペルが間違っている場合、またはプロセスが中断不可能な状態にある場合に発生する可能性があります。
Q4. killall
は安全に使用できますか?
A. 一般的にはイエスですが、一部のUnixシステム(Solarisなど)では、killall
がすべてのプロセスを終了させ、システムをシャットダウンする可能性があるため注意が必要です。LinuxとmacOSでは、指定された名前に一致するプロセスのみを終了させます。
macOSに関する考慮事項
macOSでは、killall
はLinuxと同様に動作しますが、オプションが少なくなっています。-e
、-r
、およびその他のいくつかのオプションが利用できない場合があります。また、macOSのkillall
は-w
(待機)オプションをサポートしていません。特定のシステムで利用可能なオプションは常にman killall
で確認してください。
参考文献
https://man7.org/linux/man-pages/man1/killall.1.html
改訂履歴
- 2025/05/05 初版