gpt4 book ai didi

c - 信号处理函数不断循环

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:10 25 4
gpt4 key购买 nike

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

函数代码为:

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

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

(void) sigset(SIGINT, intHandler);

最佳答案

来自 kill 手册页。

If pid is 0, sig shall be sent to all processes (excluding an unspecified set of system processes) whose process group ID is equal to the process group ID of the sender, and for which the process has permission to send a signal.

与不向发送者发送信号无关,因此您很可能想要这样的东西:

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

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

关于c - 信号处理函数不断循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com