【发布时间】:2015-08-17 01:11:20
【问题描述】:
在使用kqueue 处理信号时,有没有办法获得siginfo_t 结构?
(在Linux上使用epoll处理信号时,类似struct signalfd_siginfo是通过简单地从signalfd读取获得的)
【问题讨论】:
在使用kqueue 处理信号时,有没有办法获得siginfo_t 结构?
(在Linux上使用epoll处理信号时,类似struct signalfd_siginfo是通过简单地从signalfd读取获得的)
【问题讨论】:
很遗憾,这是不可能的。
通过kqueue 的信号传递通知发生在进程本身已经对信号作出反应之后;即它们是交货后通知,而不是交货通知。
如果进程在对kevent 的调用之间接收到多个信号,那么系统所做的就是在kevent 结构的data 字段中汇总信号的传递次数。
这意味着无法获取信号信息,因为当您调用kevent 数据时,信号已经传递给进程,并且信号详细信息已被丢弃。没有内部机制记录可以由kevent 传递的底层信号信息。
我正在阅读一些大书呆子牧场书,这似乎表明如果为进程注册了处理程序,则不会发生 kqueue 处理信号。这似乎不是 Yosemite 上的行为,即使有使用
sigaction或signal注册的处理程序,您也会收到信号事件。
【讨论】: