我有一点问题: 如果我执行main中处理函数内部的代码(而不是调用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("StartUSR2\n");
if (sigaddset(&mask, SIGINT) != 0) {
printf("Error with addset\n");
}
if (sigprocmask(SIG_BLOCK, &mask, NULL) != 0) {
printf("Error with sigprocmask\n");
}
printf("EndUSR2\n");
}
答案 0 :(得分:0)
对sigprocmask执行的更改将在信号处理程序返回时撤消。我相信在信号处理程序中设置sigprocmask没有明确定义。有关linux
的信息,请参阅rt_sigreturn(2)的联机帮助页