Is there a way to obtain siginfo_t
struct when handling signals with kqueue
?
(On Linux when handling signal with epoll
similar struct signalfd_siginfo
is obtained by simply reading from signalfd
)
问问题
286 次
1 回答
3
不幸的是,这是不可能的。
信号传递通知通过kqueue
在进程本身已经对信号做出反应之后发生;即它们是交货后通知,而不是交货通知。
如果进程在对 的调用之间接收到多个信号kevent
,那么系统所做的就是汇总信号在结构data
字段中的传递次数kevent
。
这意味着无法获取信号信息,因为当您调用kevent
数据时,信号已经交付给进程,并且信号详细信息已被丢弃。没有内部机制来记录可能由kevent
.
我正在阅读一些大书呆子牧场书,这似乎表明如果为进程注册了一个处理程序,则不会发生对信号的 kqueue 处理。这似乎不是 Yosemite 上的行为,即使有一个使用
sigaction
or注册的处理程序,您也会收到信号事件signal
。
于 2015-01-07T22:28:56.613 回答