无法在信号处理程序中设置信号掩码

时间:2015-04-23 13:44:00

标签: c signals handler

我有一点问题: 如果我执行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");

}

1 个答案:

答案 0 :(得分:0)

对sigprocmask执行的更改将在信号处理程序返回时撤消。我相信在信号处理程序中设置sigprocmask没有明确定义。有关linux

的信息,请参阅rt_sigreturn(2)的联机帮助页
相关问题