>我有一个小问题:如果我在主处理器中执行处理程序函数内部的代码(而不是调用 kill),则掩码可以正常工作并阻止 SIGINT。如果我尝试在SIGUSR2呼叫中添加信号掩码,如下面的代码所示,掩码不会屏蔽任何 SIGINT 信号。这里有什么问题?
pid_t parent_pid;
sigset_t mask;
int main(void) {
signal(SIGINT, handleSigint);
signal(SIGUSR2, handleSigUSR2);
signal(SIGUSR1, handleSigUSR1);
sleep(1);
kill(getpid(), SIGUSR2);
while (1) {
}
}
void handleSigUSR2(int sig) {
signal(SIGUSR2, handleSigUSR2);
printf("StartUSR2n");
if (sigaddset(&mask, SIGINT) != 0) {
printf("Error with addsetn");
}
if (sigprocmask(SIG_BLOCK, &mask, NULL) != 0) {
printf("Error with sigprocmaskn");
}
printf("EndUSR2n");
}
对
sigprocmask 执行的更改将在信号处理程序返回时撤消。我相信在信号处理程序中设置 sigprocmask 没有明确定义。有关 Linux 的 rt_sigreturn(2) 参见手册页