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

vam*_*msi 6 linux signals

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

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

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

任何帮助表示赞赏.

nic*_*ack 6

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

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

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


Aar*_*lla 3

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

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

  • 这是我见过的大多数查找待处理(未服务)RT 信号的方法。无论如何,其他的只是由内核组合(按类型),这可能值得注意。10,000 个 SIGUSR1 作为 1 交付。 (2认同)