【发布时间】:2023-04-02 23:10:01
【问题描述】:
当我收到SIGINT 时,我应该安装一个信号处理程序来调用函数stopContinue()。这是我在 C 中的代码 sn-p,但我不确定这是否正确。请让我知道我哪里出错了。
struct sigaction act;
memset(&act, '\0', sizeof(act));
action.sa_flags = 0;
action.sa_handler = stopContinue;
sigaction(SIGINT, &act, NULL);
这看起来大致正确吗?
有一个关于使用sigaction vs. action的讨论,这里使用标志与另一个问题不同,这不是一个骗局。
【问题讨论】:
-
当你尝试运行它时发生了什么?
-
Catch Ctrl-C in C的可能重复
-
您还需要清除阻塞信号集,例如使用
sigemptyset(&act.sa_mask);在memset()之后。 -
你没有检查代码当前是否忽略中断;如果是,您可能不应该重新启用中断处理。这是一个标准问题。使用
sigaction(),您可以使用sigaction(SIGINT, NULL, &act)来查找当前的信号处理状态——然后您可以修改它并或多或少地设置一个新状态,如图所示。