c-尽管使用了signal()函数,为什么SIGUSR1终止了我的子进程



我有以下代码:

void sig_handler(int sig) {
printf("Hello childn");
}
int main()
{
pid_t child = fork();
if (child > 0)
{
printf("Hello parentn");
kill(child, SIGUSR1);
}
else if (child == 0)
{
signal(SIGUSR1, sig_handler);
printf("In childn");
}
else
{
printf("Errorn");
}
return 0;
}

我希望代码运行:

Hello parent
Hello child
In child

但是,在父母发送kill(child, SIGUSR1);后,孩子立即被杀死,结果只是:

Hello parent

我读过文件,说SIGUSR1的dafault动作是终止,但是,我已经实现了捕获SIGUSR1的信号处理程序signal(SIGUSR1, sig_handler);,那么为什么孩子仍然被杀死?

我认为有两种可能性:要么子进程在主进程发送信号之前死亡,要么主进程在设置处理程序之前发送信号。

编辑:如果你只得到"你好家长",它不可能是第一个。

最新更新