kill()
システムコールは、
sig
によって指定されたシグナルをプロセスまたはプロセスのグループである
pid
に送信します。
sig
引数は、
sigaction(2)
で規定されたシグナルの 1 つにすることもできますし、0 にすることもできます。
0 の場合は、エラーチェックを実行しますが、実際にシグナルは送信されません。
これを使用して
pid
の有効性をチェックできます。
プロセスが
pid
によって指定されたプロセスにシグナルを送信するパーミッションを持つためには、
受信するプロセスの実ユーザ ID または実効ユーザ ID が
送信プロセスの対応するものと一致するか、
またはユーザは該当する特権を持っている (ユーザ ID 設定で与えられた特権、
またはユーザがスーパユーザである) 必要があります。
唯一の例外はシグナル SIGCONT で、これだけは呼び出し側と同一のセッション ID を
持っているプロセスに、必ず送信できます。
pid, No, が, 0, より大きい場合:
|
|
sig
シグナルは ID が
pid
に等しいプロセスに送信されます。
|
pid, No, が, 0, の場合:
|
|
sig
シグナルはグループ ID が送信側のプロセスグループ ID と等しく、それについて
プロセスがパーミッションを持っているすべてのプロセスに送信されます。
これは
killpg(2)
の変種です。
|
pid, No, が, -1, の場合:
|
|
ユーザにスーパユーザの特権がある場合、システムプロセス
( P_SYSTEM
フラグが設定されている)、ID が 1 のプロセス (通常は
init(8))
、
およびシグナルを送信しているプロセスを
除くすべてのプロセスにシグナルが送信されます。
ユーザがスーパユーザでない場合、シグナルを送信しているプロセスを除く、
ユーザと同じ uid のすべてのプロセスにシグナルが送信されます。
いずれかのプロセスにシグナルを送信できた場合、エラーは返されません。
|
System V との互換性を保つために、プロセス番号が -1 以外の負数の場合、
プロセス番号の絶対値に等しいプロセスグループ ID を持つ
すべてのプロセスにシグナルが送信されます。
これは
killpg(2)
の変種です。