我按照描述在我的应用程序上设置了信号过滤器 here , 除了我阻止所有信号。
sigfillset (&signalSet);
而且我收到了奇怪的信号#36,它在公共(public)文档和/usr/include/bits/signum.h 中都没有描述。 但是,看起来这个信号影响了主线程中的 sem_wait(),并且没有被阻塞。我发现了这样一个异常(exception):
::sem_wait() failed, code: 4(Interrupted system call)
使用 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”来查看是否以及何时调用信号函数。
关于c - 收到奇怪的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14380349/