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 が 送信プロセスの対応するものと一致するか、 またはユーザは該当する特権を持っている (set-user-ID で与えられた特権、 またはユーザがスーパユーザである) 必要があります。 唯一の例外はシグナル SIGCONT で、これだけは現在のプロセスの子孫に 必ず送信できます。

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 ではじめて登場しました。