【问题标题】:Obtain siginfo_t when handling signals with kqueue使用 kqueue 处理信号时获取 siginfo_t
【发布时间】:2015-08-17 01:11:20
【问题描述】:

在使用kqueue 处理信号时,有没有办法获得siginfo_t 结构? (在Linux上使用epoll处理信号时,类似struct signalfd_siginfo是通过简单地从signalfd读取获得的)

【问题讨论】:

    标签: macos freebsd kqueue


    【解决方案1】:

    很遗憾,这是不可能的。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多