C 为什么SIGKILL不由我的信号处理程序处理,有时会导致帐户注销
我编写以下代码的目的如下: 子进程将SIGKILL信号发送给父进程,然后父进程将使用处理程序处理该信号。处理程序只是增加计数器C 为什么SIGKILL不由我的信号处理程序处理,有时会导致帐户注销,c,ubuntu,process,kill,C,Ubuntu,Process,Kill,我编写以下代码的目的如下: 子进程将SIGKILL信号发送给父进程,然后父进程将使用处理程序处理该信号。处理程序只是增加计数器 int counter = 0; void handler(int sig) { counter++;
int counter = 0;
void handler(int sig) {
counter++;
sleep(1); /* Do some work in the handler */
return;
}
int main() {
int i;
//signal(SIGUSR2, handler);
signal(SIGKILL, handler);
if (fork() == 0) { /* Child */
for (i = 0; i < 5; i++) {
//kill(getppid(), SIGUSR2);
kill(getppid(), SIGKILL);
printf("sent SIGKILL to parent %d\n", getppid());
}
exit(0);
}
wait(NULL);
printf("counter=%d\n", counter);
exit(0);
}
显然,SIGKILL会杀死父进程。既然我的处理程序没有杀死父对象,为什么会发生这种情况
另一个不确定但概率极高的事件(~50%)发生在我的ubuntu 14.04 64位机器上。如果我执行此代码,我将自动从帐户注销。为什么会发生这种情况?您是否阅读了本手册 第一: signal()的行为在不同的UNIX版本中有所不同,在不同的Linux版本中历史上也有所不同。避免使用:改用sigaction(2)。请参阅下面的可移植性 第二: 不能捕获或忽略信号SIGKILL和SIGSTOP
sent SIGKILL to parent 8371
sent SIGKILL to parent 8371
sent SIGKILL to parent 8371
sent SIGKILL to parent 8371
sent SIGKILL to parent 8371
Killed