1

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

功能代码为:

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

}

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

(void) sigset(SIGINT, intHandler);
4

1 回答 1

3

从杀死手册页。

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

没有什么不向发送者发送信号,所以你很可能想要这样的东西:

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

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

于 2011-05-10T02:47:17.383 回答