siginfo_t
でシグナルを処理するときに構造体を取得する方法はありkqueue
ますか? (Linux では、epoll
同様の信号を処理する場合struct signalfd_siginfo
は、から読み取るだけで取得できますsignalfd
)
1 に答える
3
残念ながらそれは不可能です。
シグナル配信通知kqueue
は、プロセス自体がすでにシグナルに反応した後に発生します。つまり、配送中の通知ではなく、配送後の通知です。
プロセスが への呼び出しの間に複数のシグナルを受信した場合、システムが行うことは、シグナルが構造体のフィールドにkevent
配信された回数を集計することだけです。data
kevent
これは、kevent
データを呼び出した時点で、シグナルはすでにプロセスに配信されており、シグナルの詳細は破棄されているため、シグナル情報を取得する方法がないことを意味します。によって配信される基本的なシグナル情報の記録を保持する内部メカニズムはありませんkevent
。
プロセスにハンドラーが登録されている場合、シグナルのkqueue処理が発生しないことを示しているように見える大きなオタク牧場の本をいくつか読んでいました。これは Yosemite での動作ではないようです。
sigaction
またはを使用して登録されたハンドラーがある場合でも、シグナルのイベントを受け取りますsignal
。
于 2015-01-07T22:28:56.613 に答える