1

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)

4

1 回答 1

3

不幸的是,这是不可能的。

信号传递通知通过kqueue在进程本身已经对信号做出反应之后发生;即它们是交货后通知,而不是交货通知。

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

这意味着无法获取信号信息,因为当您调用kevent数据时,信号已经交付给进程,并且信号详细信息已被丢弃。没有内部机制来记录可能由kevent.

我正在阅读一些大书呆子牧场书,这似乎表明如果为进程注册了一个处理程序,则不会发生对信号的 kqueue 处理。这似乎不是 Yosemite 上的行为,即使有一个使用sigactionor注册的处理程序,您也会收到信号事件signal

于 2015-01-07T22:28:56.613 回答