使用kqueue处理信号时获取siginfo_t

时间:2015-01-07 17:39:25

标签: macos freebsd kqueue

使用siginfo_t处理信号时,是否有办法获取kqueue结构? (在Linux上处理信号epoll类似struct signalfd_siginfo时,只需从signalfd读取

1 个答案:

答案 0 :(得分:3)

遗憾的是,这是不可能的。

在流程本身已对信号作出反应后,通过kqueue发出信号传递通知;即它们是交付后通知,而不是交付通知。

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

这意味着无法获取信号信息,因为在您调用kevent数据时,信号已经传送到过程,信号细节已被丢弃。没有内部机制可以记录kevent可以传递的基础信号信息。

  

我正在阅读一些大书呆子牧场书,这似乎表明如果有一个处理程序注册的过程中不会发生信号的kqueue处理。这似乎不是优胜美地的行为,即使有使用sigactionsignal注册的处理程序,您也会收到信号事件。