1

siginfo_tでシグナルを処理するときに構造体を取得する方法はありkqueueますか? (Linux では、epoll同様の信号を処理する場合struct signalfd_siginfoは、から読み取るだけで取得できますsignalfd)

4

1 に答える 1

3

残念ながらそれは不可能です。

シグナル配信通知kqueueは、プロセス自体がすでにシグナルに反応した後に発生します。つまり、配送中の通知ではなく、配送後の通知です。

プロセスが への呼び出しの間に複数のシグナルを受信した場合、システムが行うことは、シグナルが構造体のフィールドにkevent配信された回数を集計することだけです。datakevent

これは、keventデータを呼び出した時点で、シグナルはすでにプロセスに配信されており、シグナルの詳細は破棄されているため、シグナル情報を取得する方法がないことを意味します。によって配信される基本的なシグナル情報の記録を保持する内部メカニズムはありませんkevent

プロセスにハンドラーが登録されている場合、シグナルのkqueue処理が発生しないことを示しているように見える大きなオタク牧場の本をいくつか読んでいました。これは Yosemite での動作ではないようです。sigactionまたはを使用して登録されたハンドラーがある場合でも、シグナルのイベントを受け取りますsignal

于 2015-01-07T22:28:56.613 に答える