c语言 - 无法在信号处理程序中设置信号掩码



>我有一个小问题:如果我在主处理器中执行处理程序函数内部的代码(而不是调用 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) 参见手册页

相关内容

最新更新