Kill

UNIX系OSにおけるkillコマンドの詳細解説



`kill`コマンドは、UNIXUnix系オペレーティングシステムで、実行中のプロセスにシグナルを送信するためのコマンドです。一般的にはプロセスを終了させるために使用されますが、実際には様々なシグナルを送信し、プロセスの動作を制御することが可能です。このコマンドは、`kill()`システムコールのラッパーとして機能し、プロセスID(PID)やプロセスグループID(PGID)を指定してシグナルを送ります。

killコマンドの概要



`kill`コマンドは、単独のユーティリティとして提供されることが多いですが、多くのシェルにはビルトインの`kill`コマンドも存在します。ユーザが最も頻繁に使用するシグナルは、`SIGTERM`(終了シグナル)と`SIGKILL`(強制終了シグナル)ですが、`kill`コマンドはこれらの他にも多くのシグナルを送信できます。デフォルトでは`SIGTERM`が送信されます。`SIGTERM`を受け取ったプログラムは、終了前に必要なクリーンアップ処理(設定ファイルの保存など)を実行することができます。しかし、多くのプログラムは`SIGTERM`に対する特別なハンドラを持っておらず、デフォルトのシグナルハンドラが代わりに呼び出されます。

シグナルの種類と扱い



`SIGKILL`と`SIGSTOP`を除くすべてのシグナルは、プロセスによって捕捉することができます。これは、プログラムが特定のシグナルを受信した際に、独自の関数を実行できるということです。一方、`SIGKILL`と`SIGSTOP`は、オペレーティングシステムカーネルだけが処理し、プロセスの実行を確実に制御する手段を提供します。`SIGKILL`はプロセスを強制的に終了させ、`SIGSTOP`は`SIGCONT`を受け取るまでプロセスを一時停止させます。

UNIX系OSには、権限のないユーザが他のプロセスを終了させることを防ぐためのセキュリティ機構が存在します。基本的には、シグナルを送信するプロセスの所有者と、受信するプロセスの所有者が同じであるか、送信者がスーパーユーザである必要があります。

利用可能なシグナルは、それぞれ異なる名前と番号が割り当てられており、システムによってこれらのマッピングが異なる場合があります。例えば、`SIGTERM`は通常15、`SIGKILL`は通常9です。

killコマンドの使用例



プロセスIDが`1234`であるプロセスに対して、`SIGTERM`シグナルを送信する例を以下に示します。

bash
kill 1234
kill -TERM 1234
kill -15 1234


`SIGKILL`シグナルを送信する例は以下の通りです。

bash
kill -KILL 1234
kill -9 1234


その他の有用なシグナルには、`HUP`、`TRAP`、`INT`、`ALRM`などがあります。`SIGINT`は、多くのシェルで`Ctrl+C`を押すことで発生させることができます。また、`Ctrl+Z`は`SIGTSTP`、`Ctrl+\`(バックスラッシュ)は`SIGQUIT`に割り当てられています。`SIGQUIT`は、プログラムにコアダンプを生成させることが可能です。

関連するプログラム



`kill`コマンド以外にも、プロセスを制御するための関連コマンドが存在します。

killall: いくつかのUNIX系OSでは、`killall`コマンドがシステムのシャットダウンプロセス中に自動的に起動されます。このコマンドは、特定のプロセスだけでなく、システム上のすべてのプロセスにシグナルを送信することが可能です。また、プロセス名によって特定のプロセスを終了させることもできます。
pkill: `pkill`コマンドは、名前やその他の属性に基づいてプロセスにシグナルを送信します。例えば、`firefox`という名前のプロセスを終了させたい場合、`pkill firefox`と入力するだけで済みます。これは、`kill`コマンドと`ps`、`grep`、`awk`などのコマンドを組み合わせて実現するよりもはるかに簡単です。

Windowsでの対応



Microsoft Windows XPやWindows Vistaには、プロセスを終了させるための`taskkill`コマンドが用意されています。また、非サポートながら、Microsoft Windows Resource Kitに含まれる`kill`コマンドも存在します。CygwinMicrosoft Windows Services for UNIXによって、GNU版の`kill`が移植され、Windows環境でも利用できるようになりました。

しかしながら、どの`kill`の派生版も、Unix環境のようにWindowsのプロセスを完全に制御することは難しいのが現状です。

Plan 9におけるkill



Plan 9では、`kill`プログラムはプロセスの終了ではなく、Plan 9のシェルである`rc`に対するコマンドを出力します。例えば、実行中のすべての`troff`プロセスを終了させるには、`kill troff | rc`と入力します。また、`slay`という同様のコマンドも提供されており、こちらは終了を拒否するプロセスを除いて同じ動作をします。

関連用語



シグナル
Xkill
killall
pkill
signal.h
再起動

参考資料



killコマンド - Linuxマニュアル(英語)
kill(1) コマンド man page(SunOS リファレンスマニュアル)
kill(1) コマンド man page(HP-UX リファレンス)
killシステムコール - Linuxマニュアル(英語)
kill(2) システム・コール man page(Solaris 10 Reference Manual Collection)(英語)
kill(2) システム・コール man page(HP-UX リファレンス)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。