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");
}
}
答案 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()
;否则,行为未定义。
所以你必须先阻止信号,然后等待它们。