我按照here所述在我的应用程序上设置信号过滤器,除了我阻止所有信号。
sigfillset (&signalSet);
我收到奇怪的信号#36,公共文档和/usr/include/bits/signum.h中没有描述。 但是,看起来这个信号影响主线程中的sem_wait(),并且没有被阻塞。我抓住了这样一个例外:
:: sem_wait()失败,代码:4(系统调用中断)
使用Red Hat 4.1.2-44(gcc版本4.1.2 20080704)。
答案 0 :(得分:3)
这是一个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'来查看是否以及何时调用信号函数。