为处理SIGINT信号而创建的函数卡在一个常量循环中。我们的想法是让父进程忽略CTRL-C,但是将其发送到子进程(并且它们默认处理它)。当我按下CTRL-C时,会调用信号处理函数,但会陷入无限循环。 kill调用应该将SIGTERM发送到进程组中除发送方进程之外的所有进程。任何帮助将不胜感激。
功能代码是:
void intHandler(int signum) {
kill(0, SIGTERM);
}
函数调用代码(在main中)是:
(void) sigset(SIGINT, intHandler);
答案 0 :(得分:3)
来自杀人手册页。
如果pid为0,则应将sig发送到进程组ID等于发送方的进程组ID且进程有权发送信号的所有进程(不包括未指定的系统进程集)
没有关于不向发送者发送信号的事情,所以你很可能想要这样的事情:
void intHandler(int signum) {
sigset(SIGINT, SIG_DFL);
kill(0, SIGTERM);
}
在将SIGTERM发送给进程组的所有成员之前,这会将发送方中的信号处理程序重置为默认值。