このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:シグナルを送信する:killコマンド
シグナルを送信する:killコマンド
Linuxシステムの管理において、プロセスの制御は非常に重要です。その中で、プロセスを操作する基本的なコマンドが kill
コマンド です。名前から「プロセスを終了させる」コマンドと誤解されがちですが、実際には シグナルを送信する コマンドです。
ここでは、kill
コマンドを使ってプロセスにシグナルを送信し、さまざまな動作を制御する方法について解説します。シグナルの仕組みを理解することで、プロセスの適切な管理とシステムの安定性向上に役立ちます。
シグナルとは
シグナルとは、プロセス間で送受信される通信手段の一つで、特定のイベントが発生したことをプロセスに通知するためのものです。プロセスは受け取ったシグナルに応じて、以下のような動作を行います。
- 終了(Terminate)
- 停止(Stop)
- 再開(Continue)
- 再読み込み(Hangup)
シグナルを送信することで、実行中のプロセスに対してこれらの動作を指示できます。
killコマンドの基本的な使い方
kill
コマンドは、指定したプロセスにシグナルを送信します。基本的な書式は以下の通りです。
【書式】kill [-シグナル名または-シグナル番号] プロセスID
- シグナル名またはシグナル番号:送信するシグナルを指定します。省略した場合はデフォルトで
TERM
シグナル(15番)が送信されます。 - プロセスID:シグナルを送信したいプロセスのIDを指定します。
例:デフォルトのシグナルを送信
kill 4585
これは以下のコマンドと同じ意味になります。
kill -TERM 4585
kill -15 4585
シグナル名とシグナル番号
各シグナルには、名前と番号が割り当てられています。kill
コマンドでは、シグナル名またはシグナル番号で指定できます。kill
コマンドを使用する際には、シグナル名の先頭の"SIG"
という接頭辞をとった名前を指定します。
主なシグナル一覧
シグナル名 | 番号 | 動作 | 説明 |
---|---|---|---|
SIGHUP | 1 | 終了 | ハングアップ。再読み込みに利用される |
SIGINT | 2 | 終了 | 割り込み。Ctrl + C に対応 |
SIGQUIT | 3 | 終了 | 終了とコアダンプ |
SIGKILL | 9 | 強制終了 | 強制的な終了(無視・捕捉不可) |
SIGTERM | 15 | 終了 | 終了要求(デフォルトのシグナル) |
SIGSTOP | 19 | 停止 | 強制的な停止(無視・捕捉不可) |
SIGTSTP | 20 | 停止 | 一時停止。Ctrl + Z に対応 |
SIGCONT | 18 | 続行 | 停止したプロセスの再開 |
フォアグラウンドジョブへのシグナル送信
キーボード操作でシグナルを送信することもできます。
Ctrl + C
:SIGINT
シグナル(2番)を送信し、プロセスを終了させます。Ctrl + Z
:SIGTSTP
シグナル(20番)を送信し、プロセスを一時停止します。
これらのシグナルは、ユーザーが直接プロセスの制御を行う際に便利です。
シグナル一覧の表示
システムで利用可能なシグナルは、kill -l
コマンドで確認できます。
user01@ubuntu:~$ kill -l
出力例:
シグナル名は先頭に"SIG"
という接頭辞が付いた名前で表示されます。
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
...(以下省略)...
特別なシグナル:SIGKILL(9番)
SIGKILL
シグナルは、プロセスに対して強制的な終了を指示します。このシグナルはプロセスによって無視・捕捉されず、Linuxカーネルが直接プロセスを終了します。
使用方法
kill -KILL プロセスID
kill -9 プロセスID
- 注意点:
SIGKILL
は最後の手段として使用します。プロセスが正常に終了できない場合にのみ使用してください。SIGKILL
を送信すると、プロセスは終了処理(例:一時ファイルの削除、状態の保存)を行えないため、データの不整合が起こる可能性があります。
正しいシグナルの使用手順
1.まずはデフォルトの TERM
シグナル(15番)で正常終了を試みる。
kill プロセスID
2.終了しない場合は、KILL
シグナル(9番)で強制終了する。
kill -KILL プロセスID
シグナルを使用したプロセス制御の例
例1:プロセスの一時停止と再開
1.プロセスの一時停止
kill -TSTP プロセスID
2.停止したプロセスの再開
kill -CONT プロセスID
例2:プロセスの再読み込み
多くのデーモンプロセスは、SIGHUP
シグナルを受け取ると設定ファイルの再読み込みを行います。
kill -HUP プロセスID
まとめ
kill
コマンドは、プロセスに対してシグナルを送信するためのコマンドであり、プロセスの終了だけでなく、一時停止や再開、再読み込みなど多彩な制御が可能です。- シグナルは、プロセス間で通信を行うための信号であり、種類に応じてプロセスの動作を制御します。
- シグナルの指定方法は、シグナル名(例:
-TERM
)またはシグナル番号(例:-15
)を使用します。省略するとデフォルトでTERM
シグナルが送信されます。 SIGKILL
(9番)は強制終了のシグナルで、プロセスが応答しない場合の最終手段として使用します。通常はTERM
シグナルでの終了を試み、それでも終了しない場合に使用します。- シグナル一覧の確認は
kill -l
コマンドで行い、利用可能なシグナルとその番号を把握できます。 - プロセス制御のベストプラクティスとして、プロセスの正常終了を優先し、強制終了は避けるべきです。
シグナルを理解し適切に使用することで、プロセス管理がより効率的かつ安全になります。kill
コマンドを活用して、システムの安定性とパフォーマンスを維持しましょう。