gpt4 book ai didi

c - SIGINT 的信号处理程序

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

我应该编写一个 C 程序来处理第一个带有自定义处理程序的 SIGINT,然后重置默认行为。我的自定义 SIGINT 处理程序应该只打印一条消息。这是我写的:

#include <string.h>
#include <strdio.h>
#include <errno.h>
#include <stdlib.h>
#include <signal.h>

void handler(sig)
int sig;
{
printf("%d received\n",sig);
}

int main(){
signal(SIGINT, handler);
signal(SIGINT, SIG_DFL);
while(1);
exit(0);
}

如果我从 shell 启动它,然后在同一个选项卡上输入 Ctrl+C,它就可以工作。如果我尝试使用 kill -INT *process pid* 发送 SIGINT,它只会终止程序,不会打印任何消息。知道为什么吗?

最佳答案

signal 函数不是累积的。您调用它两次,所以最后一个是好的,使用默认行为 (SIG_DFL)。

您只需在 mainhandler 中设置您的处理程序即可设置新行为 (signal(SIGINT, SIG_DFL);)这样下一个信号将被默认处理(终止进程)。

请注意,signal 在不同的 unix 系统上可能有不同的行为,因此您应该查看 sigaction,这是处理信号的推荐方式。

关于c - SIGINT 的信号处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33606778/

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