このページで解説している内容は、以下の 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 | 説明 |
---|---|---|
SIGHUP | 1 | ハングアップ(プロセスの再起動) |
SIGINT | 2 | 割り込み(通常はCtrl+Cによって送信される) |
SIGKILL | 9 | 強制終了(プロセスを即座に終了) |
SIGTERM | 15 | 終了(プロセスに終了要求を送る) |
SIGCONT | 18 | 停止中のプロセスを再開 |
SIGSTOP | 19 | プロセスの停止(再開不可、親プロセスが再開可能) |
SIGTSTP | 20 | 端末からの停止要求(通常は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
コマンドを使って利用可能なシグナルを確認し、適切なシグナルを使用することで、プロセス管理がさらに柔軟になります。