2013-01-17 126 views
1

我在here的描述中在我的应用程序上设置了信号滤波器,除了我阻塞了所有的信号。收到的奇怪信号

sigfillset (&signalSet); 

我收到这是不公开的文件中,也没有在/usr/include/bits/signum.h描述的怪异信号#36。 但是,它看起来像这个信号影响主线程中的sem_wait(),并没有被阻塞。我赶上这样的例外:

:: sem_wait()失败,代码:4(中断的系统调用)

红帽4.1.2-44(gcc版本4.1.2 20080704)使用。

回答

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'来查看是否以及何时调用信号函数。