尽管使用了 signal() 函数,但为什么 SIGUSR1 会终止我的 child 进程?
Why does SIGUSR1 terminate my child process although signal() function has been used?
我有以下代码:
void sig_handler(int sig) {
printf("Hello child\n");
}
int main()
{
pid_t child = fork();
if (child > 0)
{
printf("Hello parent\n");
kill(child, SIGUSR1);
}
else if (child == 0)
{
signal(SIGUSR1, sig_handler);
printf("In child\n");
}
else
{
printf("Error\n");
}
return 0;
}
我想要代码 运行:
Hello parent
Hello child
In child
但是child在parent发送kill(child, SIGUSR1);
后立即被杀死,结果就是:
Hello parent
我读过文件说 SIGUSR1
的默认操作是终止,但是,我已经实现了信号处理程序 signal(SIGUSR1, sig_handler);
来捕获 SIGUSR1
,那为什么child还是杀了?
我想说有两种可能性:子进程在主进程发送信号之前死亡,或者主进程在设置处理程序之前发送信号。
编辑:如果你只得到 "Hello parent" 就不可能是第一个。
我有以下代码:
void sig_handler(int sig) {
printf("Hello child\n");
}
int main()
{
pid_t child = fork();
if (child > 0)
{
printf("Hello parent\n");
kill(child, SIGUSR1);
}
else if (child == 0)
{
signal(SIGUSR1, sig_handler);
printf("In child\n");
}
else
{
printf("Error\n");
}
return 0;
}
我想要代码 运行:
Hello parent
Hello child
In child
但是child在parent发送kill(child, SIGUSR1);
后立即被杀死,结果就是:
Hello parent
我读过文件说 SIGUSR1
的默认操作是终止,但是,我已经实现了信号处理程序 signal(SIGUSR1, sig_handler);
来捕获 SIGUSR1
,那为什么child还是杀了?
我想说有两种可能性:子进程在主进程发送信号之前死亡,或者主进程在设置处理程序之前发送信号。
编辑:如果你只得到 "Hello parent" 就不可能是第一个。