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

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

killコマンドの概要

 killコマンドは、指定されたプロセスID(PID)に対してシグナルを送信して、プロセスを制御するためのコマンドです。シグナルを使ってプロセスの終了、再開、一時停止などを行うことができます。

【構文】
kill [オプション] PID

主なオプションと説明

オプション説明
-s シグナル名 または -s シグナルID送信するシグナルを指定します。例:-s TERM または -s 15
-シグナル名 または -シグナルID送信するシグナルを指定します。例:-TERM または -15
-l または --listすべてのシグナル名とその対応する番号を表示します。
主なオプションと説明

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

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

user01@ubuntu-vm:~$ kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

シグナルの指定方法

 シグナルを指定する際は、シグナル名(先頭の「SIG」を除いた名称も可)あるいはシグナルIDを使います。例えば、SIGTERMTERM15として指定できます。

 killコマンドで何もシグナルを指定しない場合は、SIGTERMシグナルがプロセスに送信されます。

代表的なシグナル

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

コマンドの使用例と解説

1.tmuxコマンドの実行

  • tmux」コマンドを実行します。
user01@ubuntu-vm:~$ tmux

 tmuxコマンドを実行すると、画面がリフレッシュされ、新たに操作画面(ウィンドウ)と実行環境(ペイン)が生成されます。

2.ペインを上下に分割する

  • プレフィックスキー(「Ctrl」+「b」)を押した後、「"」キーを押します。

 これで上下のペイン間を自由に移動できるようになります。下のペインが、カレントペインとなります。

3.上のペインへの移動

  • プレフィックスキー(「Ctrl」+「b」)を押した後、「o」キーを押します。

4.sleepコマンドの実行

  • 上のペインで「sleep 3600」コマンドを実行します。sleepコマンドは指定した秒数だけ停止するコマンドです。3600秒を指定して1時間、停止させます。

5.下のペインに移動する

  • sleepコマンドが実行されている間に、下のペインに移動します。
  • プレフィックスキー(「Ctrl」+「b」)を押した後、「o」キーを押します。

6.sleepコマンドのPIDを調べる

  • pgrep sleep」コマンドでsleepコマンドのPIDを特定します。

7.killコマンドでsleepコマンドのプロセスを終了させる

  • 例えば、「kill 3808」コマンドを実行します。
    ※PIDは実行環境で異なります。
  • sleepコマンドが実行されていた上のペインには「Terminated」と表示され、プロンプトが表示されます。これは、killコマンドからsleepコマンドのプロセスにSIGTERMシグナルが送信されてsleepコマンドのプロセスが終了したことを意味します。

8.ペインの終了

  • ペインを終了させるには「exit」コマンドを使用します。下のペインを「exit」コマンドで終了させます。
  • もう一度、残ったペインで「exit」コマンドを実行して終了させます。
  • もとのシェルに戻ります。

まとめ

killコマンドは、プロセスの制御に非常に重要なツールです。適切なシグナルを使用してプロセスを終了、一時停止、再開することで、システムの管理とトラブルシューティングに役立ちます。シグナルは名前やIDで指定でき、kill -lコマンドで利用可能なシグナルの一覧を確認することができます。これにより、プロセス管理の柔軟性が大幅に向上します。