我按照此处所述在我的应用程序上设置了信号过滤器,但我阻止了所有信号。
sigfillset (&signalSet);
我收到了奇怪的信号 #36,这在公共文档和 /usr/include/bits/signum.h 中都没有描述。但是,看起来这个信号影响了主线程中的 sem_wait() ,并且没有被阻塞。我发现了这样一个异常:
::sem_wait() 失败,代码:4(中断的系统调用)
使用 Red Hat 4.1.2-44(gcc 版本 4.1.2 20080704)。
这是一个 POSIX 实时信号。它们在 SIGRTMIN+1 到 SIGRTMAX 的范围内(您应该在 /usr/include/bits/signum.h 中找到)。
有关详细信息,请参阅 man 7 信号,“实时信号”部分。
如果你用
sigfillset(&signalset);
sigprocmask(SIG_BLOCK,&signalset,NULL);
或者
sigfillset(&signalset);
pthread_sigmask(SIG_BLOCK,&signalset,NULL);
仍然得到信号 36,我猜你使用的库函数也在使用信号。
您可以使用“strace”来查看是否以及何时调用信号函数。