Macos 使用kqueue处理信号时获取siginfo\u t

Macos 使用kqueue处理信号时获取siginfo\u t,macos,freebsd,kqueue,Macos,Freebsd,Kqueue,当使用kqueue处理信号时,是否有方法获得siginfo\u t结构? (在Linux上,当使用epoll处理信号时,类似的struct signalfd\u siginfo只需从signalfd读取即可获得)不幸的是,这是不可能的 通过kqueue的信号传递通知发生在进程本身已经对信号做出反应之后;i、 e.它们是交付后通知,而不是交付中通知 如果进程在调用kevent之间接收到多个信号,那么系统所做的就是在kevent结构的data字段中聚合信号的传递次数 这意味着无法获得信号信息,因为在

当使用
kqueue
处理信号时,是否有方法获得
siginfo\u t
结构?
(在Linux上,当使用
epoll
处理信号时,类似的
struct signalfd\u siginfo
只需从
signalfd
读取即可获得)

不幸的是,这是不可能的

通过
kqueue
的信号传递通知发生在进程本身已经对信号做出反应之后;i、 e.它们是交付后通知,而不是交付中通知

如果进程在调用
kevent
之间接收到多个信号,那么系统所做的就是在
kevent
结构的
data
字段中聚合信号的传递次数

这意味着无法获得信号信息,因为在调用
kevent
数据时,信号已经发送到进程,并且信号细节已经被丢弃。没有任何内部机制可以记录可由
kevent
传递的基本信号信息

我在读一些big nerd ranch的书,这本书似乎表明,如果有为流程注册的处理程序,信号的kqueue处理将不会发生。这似乎不是Yosemite上的行为,即使有使用
sigaction
signal
注册的处理程序,您也会收到信号事件