kill(キル)は、UNIXやUnix系のオペレーティングシステムにおいて、システム上で動作しているプロセスに簡単なメッセージを送るコマンドである。

概説

デフォルトで送るメッセージは、終了(termination)シグナルであり、プロセスに終了(exit)することを要求する。しかし、killは少し誤った名称である。送られるシグナルは、プロセスの終了とは無関係の場合がある。killコマンドは kill()システムコールのラッパーであり、数字のプロセス識別子(PID)で指示されたプロセスや、プロセスグループ識別子(PGID)で指示されたプロセスグループに、シグナルを送る。killは昔からスタンドアロンのユーティリティとして提供されているが、多くのシェルはわずかに異なるビルトインのkillコマンドを持っている。

ユーザが通常最も利用するシグナルはSIGTERMとSIGKILLであるが、killは多くの異なるシグナルを送ることも可能である(シグナル全体のリストはシグナルを参照)。デフォルトで送られるシグナルはSIGTERMである。このシグナルを扱うプログラムは、プログラムを終了する前に、役に立つクリーンアップの処理(構成情報をファイルに保存するなど)を行うことが出来る。しかし、多くのプログラムはこのシグナルに対して特別なハンドラを実装しておらず、デフォルトシグナルハンドラが代わりに呼ばれる。時には、特別なハンドラを持つプロセスでさえ、シグナルを正しく処理していないことがある。

SIGKILLとSIGSTOP以外の全てのシグナルは、プロセスによって横取りすることが出来る。これは、プログラムがシグナルを受信したときに、特別な関数を呼び出せることを意味している。二つの例外のSIGKILLとSIGSTOPは、ホストシステムのカーネルだけが処理を行い、プロセス実行のコントロールについて信頼できる方法を提供している。SIGKILLはプロセスを終了させる。SIGSTOPは、SIGCONTを受けるまでの間、プロセスを中断させる。

UNIXは、権限のないユーザが他のプロセスを終了させることを防止するため、セキュリティの機構を提供している。基本的には、あるプロセスが別のプロセスにシグナルを送るとき、シグナルを送るプロセスの所有者は、シグナルを受けるプロセスの所有者と同じか、スーパーユーザーであることが求められる。

利用可能なシグナルは全て異なる名前を持ち、特定の数字にマッピングされている。UNIXの実装によって、数字とシグナルのマッピングが異なることに注意する必要がある。SIGTERMは多くの場合15であり、SIGKILLは多くの場合9である。

例

プロセスに対して以下の3つの方法でSIGTERMシグナルを送ることができる(この場合はプロセスIDは'1234' である):

また、プロセスに対して以下の2つの方法でSIGKILLシグナルを送ることができる:

他の有用なシグナルには、HUP、TRAP、INT、ALRM等がある。SIGINTシグナルは、多くのシェルで、単純にCTRL+Cを押すことで発生させることができる。一般的に、CTRL+ZがSIGTSTPに、 CTRL+\ (バックスラッシュ) がSIGQUITに割り当てられている。SIGQUITはプログラムにコアダンプを行わせることが出来る。

関連するプログラム

Windows

Microsoft Windows XPとMicrosoft Windows Vistaには、プロセスを終了させるためのtaskkillコマンド[1]がある。また、非サポート版のkillが、Windows NT 3.x, NT 4.0, Windows 2000, Microsoft Windows Server 2003向けのMicrosoft Windows Resource Kits(または"RezKits")に含まれていた。バージョン3.5のkill(Copyright (C) 1994 Microsoft Corp.)が最も有用であった。GNUバージョンのkillは、Cygwinによって移植され、Microsoft Windows Services for UNIX[2]が提供するUNIX OSレイヤ中で動作した。(マイクロソフトは1999年9月17日に、Softway Systems社と同社のInterix製品を買収することで、Microsoft Windows Services for UNIXを手に入れた。)

killは、Win32の世界のスレッドと実行形式の個別の管理に、待望された粒度を提供した。しかし実質的には、どのkillの派生版も(POSIXの世界から移植されたものも、模倣したりスクラッチから作られたものも)、競合するUnixのような、実行中のウィンドウズのプロセスに対する完全な機能がなく、根本的な制御が行えなかった。

Plan 9

Plan 9において、killプログラムは実際には終了の動作をせず、プロセスIDも使用しない。むしろ、プロセスの実際の名前を使用し、プロセスを終了させるために、Plan 9のシェルであるrcに対するコマンドを出力する。例えば、実行中のtroffを全て終了させるときは、以下のようにタイプする。

kill troff | rc

slayと呼ばれる類似のコマンドが提供されている。この方法で終了されることを拒否するプロセス以外に対しては同じ動作である。

関連項目

参照

  1. ↑ Microsoft TechNet taskkill article
  2. ↑ Windows Services for UNIX

外部リンク

⌬ Phoenix Mesh CID: 未登録 IPFS未登録 📡 0ピア N=1 CRITICAL PQS D35