#include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
pid に正の値を指定した場合、シグナル sig が pid で指定された ID を持つプロセスに送られる。
pid に 0 を指定した場合、 呼び出し元のプロセスのプロセスグループに属するすべてのプロセスに sig で指定したシグナルが送られる。
pid に -1 を指定した場合、 sig で指定したシグナルが、 呼び出し元のプロセスがシグナルを送る許可を持つ全てのプロセスに 送られる。但し、プロセス番号 1 (init) へはシグナルは送られない。 以下の関連部分も参照のこと。
pid に -1 より小さな値を指定した場合、 ID が -pid のプロセスグループに属するすべてのプロセスに sig で指定したシグナルが送られる。
If sig is 0, then no signal is sent, but existence and permission checks are still performed; this can be used to check for the existence of a process ID or process group ID that the caller is permitted to signal.
For a process to have permission to send a signal, it must either be privileged (under Linux: have the CAP_KILL capability in the user namespace of the target process), or the real or effective user ID of the sending process must equal the real or saved set-user-ID of the target process. In the case of SIGCONT, it suffices when the sending and receiving processes belong to the same session. (Historically, the rules were different; see NOTES.)
POSIX.1 では、 kill(-1,sig) が 呼び出し元のプロセスがシグナルを送ることが出来るプロセス全てに sig を送ることを要求している。 但し、システム実装時に定められたシステムプロセスは シグナルの送信対象から除外される。 Linux では、プロセスが自分自身にシグナルを送れるようになっているが、 Linux の kill(-1,sig) は呼び出し元のプロセスにはシグナルを送らない。
POSIX.1 では以下の動作になることを要求している。 自分自身にシグナルを送ると、シグナルを送ったスレッドがそのシグナルをブロック しておらず、他のどのスレッドもそのシグナルを受ける状態にもなく sigwait(3) でそのシグナルを待ってもいない場合、 kill() が返る前に少なくとも一つのブロックされていない シグナルがシグナルを送ったスレッドに配送されなければならない。
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]