我有以下代码:
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);
,那么为什么孩子仍然被杀死?
我认为有两种可能性:要么子进程在主进程发送信号之前死亡,要么主进程在设置处理程序之前发送信号。
编辑:如果你只得到"你好家长",它不可能是第一个。