1

我按照此处所述在我的应用程序上设置了信号过滤器,但我阻止了所有信号。

sigfillset (&signalSet);

我收到了奇怪的信号 #36,这在公共文档和 /usr/include/bits/signum.h 中都没有描述。但是,看起来这个信号影响了主线程中的 sem_wait() ,并且没有被阻塞。我发现了这样一个异常:

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

使用 Red Hat 4.1.2-44(gcc 版本 4.1.2 20080704)。

4

1 回答 1

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

于 2013-01-17T14:07:17.527 回答