繁体   English   中英

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

[英]Can't set a signal mask in signal handler

我有一个小问题:如果我在主程序中执行处理程序功能内的代码(而不是调用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");

}

当信号处理程序返回时,对sigprocmask执行的更改将被撤消。 我相信没有明确定义在信号处理程序中设置sigprocmask。 有关Linux的信息,请参见rt_sigreturn(2)的手册页

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM