c - 收到奇怪的信号

标签 c linux signals

我按照描述在我的应用程序上设置了信号过滤器 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/

相关文章:

c - 卡在信号处理函数内的 fgets 的 scanf 上

java - 如何向 JNI_CreateJavavm 调用创建的 JVM 发送信号?

c - 向进程组中除自身以外的所有进程发送信号

c - 在 C 中打印字符数组

c - 当其中一个线程收到信号并且没有一个线程阻止它时,是否所有线程都停止了?

c++ - 如何将双指针分配给数组? C/C++

c - [ N ... M ] 在 C 聚合初始值设定项中是什么意思?

linux - stat命令如何计算文件的 block ?

python - 将 float 重铸为 gdb 中的 ieee754 表示形式

c - aio_write 在我的简单客户端/服务器程序中不起作用