使用siginfo_t
处理信号时,是否有办法获取kqueue
结构?
(在Linux上处理信号epoll
类似struct signalfd_siginfo
时,只需从signalfd
读取
答案 0 :(得分:3)
遗憾的是,这是不可能的。
在流程本身已对信号作出反应后,通过kqueue
发出信号传递通知;即它们是交付后通知,而不是交付通知。
如果进程在对kevent
的调用之间收到多个信号,那么所有系统都会聚合信号在data
结构的kevent
字段中传递的次数
这意味着无法获取信号信息,因为在您调用kevent
数据时,信号已经传送到过程,信号细节已被丢弃。没有内部机制可以记录kevent
可以传递的基础信号信息。
我正在阅读一些大书呆子牧场书,这似乎表明如果有一个处理程序注册的过程中不会发生信号的kqueue处理。这似乎不是优胜美地的行为,即使有使用
sigaction
或signal
注册的处理程序,您也会收到信号事件。