sigaddset vs pthread_sigmask

时间:2015-05-12 14:23:28

标签: linux signals

sigaddset()pthread_sigadd()功能有何区别?在以下代码中,如果pthread_sigmask()函数调用未被注释,则信号将会出现。

    sigemptyset(&signal_set);
    if( sigaddset(&signal_set,SIGUSR1) == -1){
            printf"sigaddset() retuned error number %d\n",errno);
    }
    //pthread_sigmask ( SIG_BLOCK, &signal_set, NULL );
    while(1){
            if(sigwait(&signal_set, &sig_number) == 0){
                    printf("Got signal\n");
            }
    }

1 个答案:

答案 0 :(得分:0)

sigaddset()pthread_sigadd()一起使用但做了不同的事情。

  • sigaddset()

http://man7.org/linux/man-pages/man3/sigsetops.3.html

  

这些功能允许操纵POSIX信号集   sigaddset()sigdelset()分别添加和删除来自set的信号。

  • pthread_sigadd()

设置完信号后,您可以通过sigprocmask() / pthread_sigmask()屏蔽它。

http://man7.org/linux/man-pages/man2/sigprocmask.2.html
http://man7.org/linux/man-pages/man3/pthread_sigmask.3.html

  

sigprocmask() [以及pthread_sigmask()]用于获取和/或更改信号掩码          调用线程。 信号掩码是其传递的信号集          目前已阻止来电者(另请参阅signal(7)了解更多信息          详情)。

关于您发布的代码,遇到即将发生的信号是预期会如何运作。

http://pubs.opengroup.org/onlinepubs/009695399/functions/sigwait.html

  

set 定义的信号在通话时已被阻止sigwait();否则,行为未定义。

所以你必须先阻止信号,然后等待它们。