信号处理函数保持循环

时间:2011-05-10 02:26:57

标签: c infinite-loop signal-handling

为处理SIGINT信号而创建的函数卡在一个常量循环中。我们的想法是让父进程忽略CTRL-C,但是将其发送到子进程(并且它们默认处理它)。当我按下CTRL-C时,会调用信号处理函数,但会陷入无限循环。 kill调用应该将SIGTERM发送到进程组中除发送方进程之外的所有进程。任何帮助将不胜感激。

功能代码是:

void intHandler(int signum) {
kill(0, SIGTERM);

}

函数调用代码(在main中)是:

(void) sigset(SIGINT, intHandler);

1 个答案:

答案 0 :(得分:3)

来自杀人手册页。

  

如果pid为0,则应将sig发送到进程组ID等于发送方的进程组ID且进程有权发送信号的所有进程(不包括未指定的系统进程集)

没有关于不向发送者发送信号的事情,所以你很可能想要这样的事情:

void intHandler(int signum) {
    sigset(SIGINT, SIG_DFL);
    kill(0, SIGTERM);
}

在将SIGTERM发送给进程组的所有成员之前,这会将发送方中的信号处理程序重置为默认值。