我读取父进程在子进程执行之前终止,子进程将发送SIGHUP和SIGCONT信号。那么这将在init进程下工作。 所以我想知道子进程是否生成信号? 为此,我计算出这样的程序,但我没有收到任何消息,如收到的信号。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
void handler(int signo)
{
if(signo == SIGHUP)
printf("SIGHUP present\n");
else if (signo == SIGCONT)
printf("SIGCONT present\n");
}
main()
{
pid_t pid;
signal(SIGCONT,handler);
signal(SIGHUP,handler);
if((pid=fork()) == 0)
{
sleep(5);
printf("Child terminated\n");
exit(0);
}
exit(0);
}
答案 0 :(得分:1)
如果父母去世,则不会通过信号通知孩子。
如果孩子死亡,父母会收到SIGCHLD。
答案 1 :(得分:0)
据我所知,信号处理程序在进程(注册处理程序)接收到任何信号而不是相反的情况下工作。 在您的情况下,如果父进程或子进程收到任何信号,则将调用该处理程序。 因为这里子进程本身正在生成信号(如你所说,我还没有读过这个),处理程序不会被调用。 如果我错了,请纠正我。