我正在阅读一些内容sigaction()
(来源来自我的课程笔记),但我不确定我是否理解这段文字:
仅在信号处理程序的持续时间内计算和安装信号掩码。
默认情况下,信号“sig”在信号出现时也会被屏蔽。
一旦使用 sigaction 为特定信号安装了一个动作,它就会一直保持安装状态,直到明确请求另一个动作。
这是否意味着从信号处理程序返回后恢复默认信号掩码?另外,我是否必须在使用后重新安装处理程序,就好像我正在使用一样signal()
?
此外,还有这段代码:
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void termination_handler(int signum) {
exit(7);
}
int main (void) {
struct sigaction new_action,old_action;
new_action.sa_handler = termination_handler;
sigemptyset(&new_action.sa_mask);
sigaddset(&new_action.sa_mask, SIGTERM);
new_action.sa_flags = 0;
sigaction(SIGINT, NULL, &old_action);
if (old_action.sa_handler != SIG_IGN) {
sigaction(SIGINT,&new_action,NULL);
}
sleep(10);
return 0;
}
那么 - 究竟将如何SIGTERM
处理?我可以看到安装的处理程序是termination handler()
,但随后SIGTERM
被添加到信号掩码中而没有使用sigprocmask()
. 这是什么意思?谢谢!
PS最后一个问题:为什么if
声明在main()
?