KILL(2)

名称
kill - プロセスにシグナルを送信する

ライブラリ
libc

書式
<sys/types.h> <signal.h> int kill(pid_t pid, int sig)

解説
kill() システムコールは、 sig によって指定されたシグナルをプロセスまたはプロセスのグループである pid に送信します。 sig 引数は、 sigaction(2) で規定されたシグナルの 1 つにすることもできますし、0 にすることもできます。 0 の場合は、エラーチェックを実行しますが、実際にシグナルは送信されません。 これを使用して pid の有効性をチェックできます。

プロセスが pid によって指定されたプロセスにシグナルを送信するパーミッションを持つためには、 受信するプロセスの実ユーザ ID または実効ユーザ ID が 送信プロセスの対応するものと一致するか、 またはユーザは該当する特権を持っている (ユーザ ID 設定で与えられた特権、 またはユーザがスーパユーザである) 必要があります。 唯一の例外はシグナル SIGCONT で、これだけは呼び出し側と同一のセッション ID を 持っているプロセスに、必ず送信できます。

pid が 0 より大きい場合:
    sig シグナルは ID が pid に等しいプロセスに送信されます。

pid が 0 の場合:
    sig シグナルはグループ ID が送信側のプロセスグループ ID と等しく、それについて プロセスがパーミッションを持っているすべてのプロセスに送信されます。 これは killpg(2) の変種です。

pid が -1 の場合:
    ユーザにスーパユーザの特権がある場合、システムプロセス (P_SYSTEM フラグが設定されている)、ID が 1 のプロセス (通常は init(8)) 、 およびシグナルを送信しているプロセスを 除くすべてのプロセスにシグナルが送信されます。 ユーザがスーパユーザでない場合、シグナルを送信しているプロセスを除く、 ユーザと同じ uid のすべてのプロセスにシグナルが送信されます。 いずれかのプロセスにシグナルを送信できた場合、エラーは返されません。

System V との互換性を保つために、プロセス番号が -1 以外の負数の場合、 プロセス番号の絶対値に等しいプロセスグループ ID を持つ すべてのプロセスにシグナルが送信されます。 これは killpg(2) の変種です。

戻り値

エラー
kill() システムコールは次の場合に処理に失敗し、シグナルは送信されません:

[EINVAL]
    sig 引数が有効なシグナル番号ではありません。

[ESRCH]
    pid で指定されたプロセスに対応するプロセスが検出できません。

[ESRCH]
    プロセス ID は 0 として与えられたものの、 送信プロセスにプロセスグループがありません。

[EPERM]
    送信プロセスはスーパユーザではなく、その実効ユーザ ID が受信プロセスの 実効ユーザ ID と一致しません。 プロセスグループにシグナルを送信するとき、グループのメンバの いずれかにシグナルを送信することができない場合、このエラーが返されます。

関連項目
getpgrp(2), getpid(2), killpg(2), sigaction(2), raise(3), init(8)

規格
kill() システムコールは p1003.1-90 に適合しています。

歴史
kill() 関数は AT&T UNIX ではじめて登場しました。