このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】プロセスにシグナルを送信する:killallコマンド

killallコマンドの概要

 killallコマンドは、指定したプロセス名に一致するすべてのプロセスに対してシグナルを送信するためのコマンドです。これにより、プロセスIDを指定することなくプロセスを制御することができます。特に複数の同名プロセスを一度に管理する際に便利です。

【構文】
killall [オプション] プロセス名

主なオプションと説明

オプション説明
-s シグナル名 または -s シグナルID送信するシグナルを指定します。例:-s TERM または -s 15
-シグナル名 または -シグナルID送信するシグナルを指定します。例:-TERM または -15
-l または --listすべてのシグナル名とその対応する番号を表示します。
-i対話的に確認を行います。
-v冗長モード。処理された各プロセスの情報を表示します。
-w指定したプロセスが終了するのを待機します。
主なオプションと説明

killallコマンドで指定できるシグナルを表示:killall -lコマンド

 「killall -l」コマンドを実行すると、システムで利用可能なすべてのシグナル名とその対応する番号のリストが表示されます。

user01@ubuntu-vm:~$ 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

代表的なシグナル

 以下は、一般的に使用される代表的なシグナルのリストです。killallコマンドでも同様に使用できます。

シグナル名シグナルID説明
SIGHUP1ハングアップ(プロセスの再起動)
SIGINT2割り込み(通常はCtrl+Cによって送信される)
SIGKILL9強制終了(プロセスを即座に終了)
SIGTERM15終了(プロセスに終了要求を送る)
SIGCONT18停止中のプロセスを再開
SIGSTOP19プロセスの停止(再開不可、親プロセスが再開可能)
SIGTSTP20端末からの停止要求(通常はCtrl+Zによって送信される)
代表的なシグナル

コマンドの使用例と解説

1.プロセス名での終了

 「sleep 1000」コマンドをバックグラウンドで実行します。バックグラウンドでジョブを実行するには、コマンドの末尾に「&(アンド)」記号を追加して実行します。

  • sleep 1000 &」コマンドを実行します。
user01@ubuntu-vm:~$ sleep 1000 &
[1] 6498
  • killall sleep」コマンドを実行します。

名前がsleepであるすべてのプロセスに対してSIGTERMシグナルを送信し、終了を要求します。

user01@ubuntu-vm:~$ killall sleep 
[1]+  Terminated              sleep 1000

2.シグナルを指定してプロセスを終了

以下のコマンドを実行します。

  • sleep 1000 &」コマンド
  • sleep 2000 &」コマンド
  • killall -s KILL sleep」コマンド

バックグラウンドで「sleep」コマンドを2つ実行します。

名前がsleepであるすべてのプロセスに対してSIGKILLシグナルを送信し、即座に強制終了します。

user01@ubuntu-vm:~$ sleep 1000 &
[1] 6633
user01@ubuntu-vm:~$ sleep 2000 &
[2] 6634
user01@ubuntu-vm:~$ killall -s KILL sleep 
[1]-  強制終了            sleep 1000
[2]+  強制終了            sleep 2000

3.対話的に確認しながら終了

以下のコマンドを実行します。

  • sleep 1000 &」コマンド
  • killall -i sleep」コマンド

バックグラウンドで「sleep」コマンドを1つ実行します。

 名前がsleepであるすべてのプロセスを終了する前に確認を行います。「sleep(6638) をkillしますか? (y/N)」の問いには「y」と入力してプロセスを終了させます。

user01@ubuntu-vm:~$ sleep 1000 &
[1] 6638
user01@ubuntu-vm:~$ killall -i sleep 
sleep(6638) をkillしますか? (y/N) y
[1]+  Terminated              sleep 1000

4.終了するプロセスを表示

以下のコマンドを実行します。

  • sleep 1000 &」コマンド
  • killall -v sleep」コマンド

バックグラウンドで「sleep」コマンドを1つ実行します。

 名前がsleepであるすべてのプロセスに対してシグナルを送信し、処理されたプロセスの情報を表示します。

user01@ubuntu-vm:~$ killall -v sleep 
sleep(6644) をシグナル 15 でkillしました
[1]+  Terminated              sleep 1000

まとめ

 killallコマンドは、プロセス名で一致するすべてのプロセスにシグナルを送信するために非常に便利です。これにより、個別のプロセスIDを指定する必要がなく、特定のアプリケーションやサービスのすべてのインスタンスを一度に管理することができます。killall -lコマンドを使って利用可能なシグナルを確認し、適切なシグナルを使用することで、プロセス管理がさらに柔軟になります。