如何确定unix信号队列中待处理信号的数量(Linux)

时间:2009-12-18 11:44:44

标签: linux signals

我需要在linux中的线程的信号队列中找到待处理信号的数量。是否有Linux提供的API?

除了我们要查询的线程之外,需要从线程调用此API。

sigpending提供了调用线程的API。是否有任何API,它将线程ID作为arg,并提供有关队列中待处理信号的一些信息。

感谢任何帮助。

2 个答案:

答案 0 :(得分:6)

sigpending()返回一个待处理的线程信号集。您可以迭代该sigset_t并使用sigismember()来测试成员资格。

传统上,UNIX不会排队多个信号实例(从这个意义上讲,它们仍然是“不可靠的”)。有时您可以通过实时信号获得此效果。

在Linux上,从signalfd读取()将允许一次读取一个以上的信号实例,如果它们排队。

答案 1 :(得分:3)

我不知道这样的API,但这是一个解决方法:编写一个包装信号代码的小型库。发送信号时,增加原子计数器。处理信号时,再次递减计数器。然后,你可以使用这个原子计数器来回答你的好奇心。

[编辑]如果这还不够,那么你有源:只需检查所涉及的代码和数据结构,并使用你需要的内容来查看内核结构。但这可能涉及编写一个模块(因为进程无法读取内核的数据结构),而且您的代码将依赖于编译它的内核。所以我建议不要这样做。