Linux / コマンド / kill - PIDにシグナルを送る

killは、指定したプロセスID(PID)や、同じシェルが管理するジョブへシグナルという通知を送ります。名前とは異なり、基本動作は強制終了ではなく、SIGTERMによる終了要求です。

Bashではkillがシェル組み込みコマンドとして提供されます。シグナルを受け取ったプロセスがどのように反応するかは、シグナルの種類とプログラムの実装によります。終了が必要な場合は、まず通常の終了手順とSIGTERMを試してください。

基本的な文法

kill [-シグナル] PID ...

インストールされている実装とオプションは、配布版によって異なる場合があります。help killで現在のシステムの説明を確認してください。

使用例

PID確認

1234 は例なので、停止してよい自分の実習用プロセスのPIDに置き換えます。psでPID・所有者・実行内容を確認 し、対象と判断できた場合だけ次の送信操作へ進みます。

ps -p 1234 -o pid,user,stat,cmd

正常終了要求

デフォルトのSIGTERMを明示的に送ります。

kill -TERM 1234

使用可能なシグナル一覧

現在のシェル実装のシグナル名を確認します。

kill -l

PIDを確認してシグナルを送る

killは名前ではなくPIDを対象に信号を送信します。次の12345は説明用番号なので、実際に実行する際はまずpsで確認した自身のテストプロセスPIDに置き換えてください。

ps -p 12345 -o pid,stat,comm
kill -TERM 12345
ps -p 12345 -o pid,stat,comm

最初の確認時には対象が表示され、kill 成功時には通常出力はありません。正常終了が終わると最後の確認はヘッダーだけ表示されるか、対象がないという結果になります。これは例示の流れであり、実際の終了までにかかる時間はプロセスごとに異なります。

SIGTERMは整理の機会を与える基本終了要求です。SIGKILLは整理作業をスキップするため、最後の手段として使用してください。PIDは再利用される可能性があるため、古い番号をそのまま信用すると他のプロセスに信号を送信する危険があります。

主なオプションと形式

オプション・形式 説明
-TERM プロセスにSIGTERMで終了を要求します。後処理や応答は対象プログラムに依存します。
-INT 端末の割り込みに相当する信号を送ります。
-HUP プログラムごとに異なる解釈がされるハングアップ信号を送ります。
-KILL 捕捉・無視できないSIGKILLを送ります。対象へ後処理の機会を与えませんが、即座に表示から消えるとは限りません。
-0 シグナルを送らず、対象の存在と送信権限を調べます。アプリの正常稼働を保証する検査ではありません。

使用する際の注意点

PIDは再利用される可能性があるため、古いPIDをそのまま使用しないでください。kill -0の失敗は、プロセスが存在しないだけでなく、権限不足の場合もあります。 kill -KILLは最後の手段であり、データの後処理やファイル書き込みが中断されることがあります。また、ここで扱う対象は正のPIDです。0や負のPIDはプロセスグループなどを対象にする ため、別の意味として扱います。

よくある質問

killを実行したのにプロセスが残っている場合は?

SIGTERMへの応答待ちや後処理中の可能性があります。Linuxの割り込み不能待機(D)では終了が遅れ、ゾンビ(Z)は既に実行が終わって親による終了情報の回収を待つ状態なので、SIGKILLを重ねても解決しません。状態とログ、サービス管理ツールによる再起動の有無も確認してください。

公式ドキュメント

オプションの正確な動作や実装ごとの違いは、kill関連の公式ドキュメントで確認できます。