UNIX系OSにおけるkillコマンドの詳細解説
`kill`コマンドは、
UNIXや
Unix系の
オペレーティングシステムで、実行中の
プロセスにシグナルを送信するためのコマンドです。一般的には
プロセスを終了させるために使用されますが、実際には様々なシグナルを送信し、
プロセスの動作を制御することが可能です。このコマンドは、`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`コマンドも存在します。
Cygwinや
Microsoft 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 リファレンス)