我需要在linux中的线程的信号队列中找到待处理信号的数量。是否有Linux提供的API?
除了我们要查询的线程之外,需要从线程调用此API。
sigpending提供了调用线程的API。是否有任何API,它将线程ID作为arg,并提供有关队列中待处理信号的一些信息。
感谢任何帮助。
答案 0 :(得分:6)
sigpending()返回一个待处理的线程信号集。您可以迭代该sigset_t并使用sigismember()来测试成员资格。
传统上,UNIX不会排队多个信号实例(从这个意义上讲,它们仍然是“不可靠的”)。有时您可以通过实时信号获得此效果。
在Linux上,从signalfd读取()将允许一次读取一个以上的信号实例,如果它们排队。
答案 1 :(得分:3)
我不知道这样的API,但这是一个解决方法:编写一个包装信号代码的小型库。发送信号时,增加原子计数器。处理信号时,再次递减计数器。然后,你可以使用这个原子计数器来回答你的好奇心。
[编辑]如果这还不够,那么你有源:只需检查所涉及的代码和数据结构,并使用你需要的内容来查看内核结构。但这可能涉及编写一个模块(因为进程无法读取内核的数据结构),而且您的代码将依赖于编译它的内核。所以我建议不要这样做。