用kqueue处理信号时获取siginfo_t

Obtain siginfo_t when handling signals with kqueue

在使用 kqueue 处理信号时,有没有办法获取 siginfo_t 结构? (在 Linux 处理信号时 epoll 类似 struct signalfd_siginfo 是通过简单地从 signalfd 读取获得的)

很遗憾,这不可能。

通过 kqueue 的信号传递通知发生在进程本身已经对信号做出反应之后;也就是说,它们是 post 送达通知,而不是送达通知。

如果进程在对 kevent 的调用之间接收到多个信号,那么系统所做的只是汇总在 [=11= 的 data 字段中传递信号的次数]结构。

这意味着无法获取信号信息,因为在您调用 kevent 数据时,信号已经传送到进程,并且信号详细信息已被丢弃.没有内部机制记录可以由 kevent.

传递的基础信号信息

I was reading some of the big nerd ranch book which seems to indicate that the kqueue handling for signals would not occur if there was a handler registered for the process. This does not appear to be the behaviour on Yosemite, you receive the event for signals even if there is a handler registered using either sigaction or signal.