如何知道orphand进程创建时传递了哪些信号?

时间:2014-12-22 09:47:19

标签: c signals fork

我读取父进程在子进程执行之前终止,子进程将发送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);
}

2 个答案:

答案 0 :(得分:1)

如果父母去世,则不会通过信号通知孩子。

如果孩子死亡,父母会收到SIGCHLD。

答案 1 :(得分:0)

据我所知,信号处理程序在进程(注册处理程序)接收到任何信号而不是相反的情况下工作。 在您的情况下,如果父进程或子进程收到任何信号,则将调用该处理程序。 因为这里子进程本身正在生成信号(如你所说,我还没有读过这个),处理程序不会被调用。 如果我错了,请纠正我。