# Kill 組込みコマンド

Kill 組込みコマンドはプロセスにシグナルを送ります。

## 構文

- `kill [-シグナル|-s シグナル|-n シグナル] プロセス…`

- `kill -l [-v] [シグナル…]`

Kill コマンドでは、​POSIX 準拠モードであるかどうかにかかわらずオプションはオペランドより先に全て指定しなければなりません。最初のオペランドより後にあるコマンドライン引数は全てオペランドとして解釈します。

## 説明

`-l` オプションを付けずに実行すると、kill コマンドは指定したプロセスにシグナルを送信します。送信するシグナルの種類はシグナル指定オプションで指定します。シグナルの種類を指定しない場合は SIGTERM シグナルを送信します。

`-l` オプションを付けて実行すると、kill コマンドは指定したシグナルに関する情報を標準出力に出力します。シグナルを指定しない場合は全てのシグナルに関する情報を表示します。

## オプション

### シグナル指定オプション

`-シグナル`
`-s シグナル`
`-n シグナル`

  送信するシグナルを指定します。シグナルにはシグナル番号とシグナル名のどちらかを指定します。シグナル番号として 0 を指定すると、シグナルを送ることができるかどうかの判定だけを行い、実際にはシグナルを送信しません。シグナルを名前で指定する際は、大文字と小文字の区別はありません。

シグナル指定オプションは一度に一つまでしか使えません。

### 他のオプション

`-l`

  シグナルに関する情報を表示します。

`-v`

  シグナルに関する情報をより詳しく表示します。`-v` オプションを指定していない場合は単にシグナル名を出力しますが、指定している場合はシグナル番号・シグナル名・シグナルの簡単な説明を出力します。

  このオプションを指定したときは同時に `-l` も指定してあるとみなします。

## オペランド

プロセス

  シグナルを送信するプロセスをプロセス ID・プロセスグループ ID・ジョブ ID のいずれかで指定します。プロセスグループ ID を指定するときは、先頭に負号 (`-`) を付けます。プロセスとして `0` を指定すると、シェルプロセスが属するプロセスグループを指定したものとみなします。プロセスとして `-1` を指定すると、全てのプロセスにシグナルを送信します。

シグナル

  情報を表示するシグナルの名前または番号です。シグナルによって中断したコマンドの終了ステータスを指定することもできます。

## 終了ステータス

エラーがない限り kill コマンドの終了ステータスは 0 です。一つ以上のプロセスにシグナルを送ることができた場合、他にシグナルを送れなかったプロセスがあったとしても終了ステータスは 0 になります。

## 補足

Kill コマンドは​必須組込みコマンドです。

負数に見えるコマンドライン引数の扱いには注意が必要です。例えば `kill -1 -2` では `-1` がシグナル指定オプション、`-2` がオペランドとなるので、番号 1 のシグナルをプロセスグループ 2 に送信します。`kill — -1 -2` や `kill -TERM -1 -2` では `-1` と `-2` はどちらもオペランドになります。

POSIX には `-v` および `-n` オプションに関する規定はありません。よってこれらのオプションは POSIX 準拠モードでは使えません。また POSIX は `-s` オプションの引数としてシグナル番号を指定することを認めていません。POSIX はシグナルのオペランドとしてシグナルの名前を指定することを認めていません。

POSIX は、シグナル名は `INT` や `QUIT` のように最初の SIG を除いた形で指定しなければならないと規定しています。非 POSIX 準拠モードの yash では、拡張として SIG を付けた形でも指定できます。