【问题标题】:How to know which signals are passed when the orphand process created?如何知道创建孤儿进程时传递了哪些信号?
【发布时间】:2014-12-22 09:47:18
【问题描述】:

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

【问题讨论】:

  • 请你澄清你问题的第一段,注意英文。正如所写,这对我来说毫无意义。特别是,what 意味着发送SIGHUPSIGCONT?我怀疑你是想在这里询问流程组和流程组负责人。
  • @abligh - 当父进程在其子进程执行之前终止时,子进程将成为孤儿。那个时候子进程会产生一个信号来继续执行,这个信号号是SIGHUP AND SIGCONT。你懂不懂??
  • @Bhavanesh 我理解各个单词(并且对 UNIX 信号处理有很好的了解),但作为一个问题似乎没有多大意义。我怀疑英语可能不是您的第一语言,我知道这会使其变得更加困难,但我认为如果您仔细地表达您的问题以便尽可能多的人能够理解它,您将会获得更大的成功。
  • @abligh - 嗯好的,谢谢你的回复,如果我做错了,你可以编辑它,然后我会更正它

标签: c signals fork


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 2020-06-04
      相关资源
      最近更新 更多