| 標準/拡張機能 | C/C++ | 依存項目 |
|---|---|---|
POSIX.1 |
両方 | POSIX(ON) |
#define _POSIX_SOURCE
#include <signal.h>
int kill(pid_t pid, int sig);
プロセスまたはプロセス・グループにシグナルを送信します。プロセスは、送信側の実ユーザー ID または有効なユーザー ID が、意図される受信側の実ユーザー ID または有効なユーザー ID と一致する場合に、シグナルを送信する許可を持ちます。プロセスは、適切な権限を持っている場合にも、シグナルを送信することができます。_POSIX_SAVED_IDS が unistd.h ヘッダー・ファイル内に定義されている場合、意図される受信側の保管された設定ユーザー ID が、有効なユーザー ID の代わりに チェックされます。
ユーザー ID にかかわらず、プロセスは、送信側と同じセッション (同じセッション ID) の メンバーであるプロセスに対しては、いつでも SIGCONT シグナルを 送信できます。
signal() または sigaction() を使用すると、kill() が呼び出された場合の シグナルの対処方法を指定することができます。
プロセスは kill() を使用して、プロセス自身にシグナルを送信できます。シグナルがブロックも無視もされない場合、kill() が戻る前に、保留中でブロックされていないシグナルが 1 つ以上送信側へ送達されます。保留中のブロックされていないシグナルがほかにない場合、届けられるシグナルは sig になります。
この関数がサポートされるのは、POSIX プログラムだけです。 SIGIOERR を渡すために使用できます。
この関数では、SIGTHSTOP および SIGTHCONT シグナルの使用はサポートされていません。
kill() は、pid が指定するプロセスのいずれかに sig を送信する許可を持っている場合、0 を戻します。
⁄* CELEBK01 *⁄
#define _POSIX_SOURCE
#include <signal.h>
#include <stdio.h>
#include <sys⁄types.h>
#include <unistd.h>
#include <sys⁄wait.h> ⁄*FIX: used to be <wait.h>*⁄
main() {
sigset_t sigset;
int p[2], status;
char c='z';
pid_t pid;
if (pipe(p) != 0)
perror("pipe() error");
else {
if ((pid = fork()) == 0) {
sigemptyset(&sigset);
puts("child is letting parent know he's ready for signal");
write(p[1], &c, 1);
puts("child is waiting for signal");
sigsuspend(&sigset);
exit(0);
}
puts("parent is waiting for child to say he's ready for signal");
read(p[0], &c, 1);
puts("child has told parent he's ready for signal");
kill(pid, SIGTERM);
wait(&status);
if (WIFSIGNALED(status))
if (WTERMSIG(status) == SIGTERM)
puts("child was ended with a SIGTERM");
else
printf("child was ended with a %d signal¥n", WTERMSIG(status));
else puts("child was not ended with a signal");
close(p[0]);
close(p[1]);
}
}
parent is waiting for child to say he's ready for signal
child is letting parent know he's ready for signal
child is waiting for signal
child has told parent he's ready for signal
child was ended with a SIGTERM