このページで解説している内容は、以下の 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"という接頭辞をとった名前を指定します。

主なシグナル一覧

シグナル名番号動作説明
SIGHUP1終了ハングアップ。再読み込みに利用される
SIGINT2終了割り込み。Ctrl + C に対応
SIGQUIT3終了終了とコアダンプ
SIGKILL9強制終了強制的な終了(無視・捕捉不可)
SIGTERM15終了終了要求(デフォルトのシグナル)
SIGSTOP19停止強制的な停止(無視・捕捉不可)
SIGTSTP20停止一時停止。Ctrl + Z に対応
SIGCONT18続行停止したプロセスの再開
主なシグナル一覧

フォアグラウンドジョブへのシグナル送信

キーボード操作でシグナルを送信することもできます。

  • Ctrl + CSIGINT シグナル(2番)を送信し、プロセスを終了させます。
  • Ctrl + ZSIGTSTP シグナル(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コマンドを活用して、システムの安定性とパフォーマンスを維持しましょう。