2015-01-07 73 views

回答

1

這是不幸的是不可能的(在Linux與epoll類似struct signalfd_siginfo處理信號時,通過簡單地從signalfd閱讀獲得)。

通過kqueue的信號傳遞通知發生在處理本身已經對信號作出反應之後;即它們是交付後通知,而不是交貨通知。

如果該過程接收的呼叫之間的多個信號,以kevent,那麼所有的系統所做的是聚集的次數的信號已在kevent結構的data場被輸送的數目。

這意味着無法獲取信號信息,因爲在調用kevent數據時,信號已經傳遞到進程,並且信號細節已被丟棄。沒有內部機制可以記錄kevent可能提供的底層信號信息。

我正在讀一些大的書呆子牧場書,這似乎表明如果有一個註冊過程的處理程序不會發生信號的kqueue處理。這似乎不是優勝美地上的行爲,即使您使用sigactionsignal註冊了處理程序,您也會收到信號事件。