0

信号が失われるというこの問題があります。つまり、シグナルが子プロセスによって生成され、親プロセスの他の子プロセスによって受信されるこのシステムがあります。sigwait と sigprocmask を使用して実際にブロックし、非同期ハンドラーを登録するのではなく、子プロセスを受信するシグナル内でシグナルを待機しました。

今、このシステムを実行すると。最初に、子プロセスから生成されたシグナルが受信側の子プロセスによってブロックされ、次に sigwait を使用してこれらの保留中のシグナルを実際に処理していることがわかります。したがって、シグナルは保留中であり、sigwait を使用して取得され、続行されます。

しかし、時間が経つにつれて、信号が以前ほど消費されていないことがわかりました。つまり、大量のシグナルが生成され、それらは受信プロセスによって処理されていません。保留中のシグナルが多数ある場合、シグナルが失われる可能性はありますか?

4

2 に答える 2

0

保留中のシグナルはキューに入れられないため、明示的にチェックしたり処理したりしないと失われます。そのため、すべての子が終了していることを確認する必要があります。

出典:古い講義資料へのリンク。

于 2012-09-17T19:10:26.220 に答える
0

リアルタイム シグナル ( ~ の間のシグナル) のみがSIGRTMINSIGRTMAXOS でサポートされている場合、キューに入れられることが保証されます (キューに入れられたシグナルの最大数までSIGQUEUE_MAX)。受信プロセスに同じコードの保留中のシグナルがすでにある場合は、他のシグナルが失われる可能性があります。

の仕様からsigaction:

保留中のシグナルの後続のオカレンスが生成される場合、Realtime Signals Extension オプションでキューイングが必要な状況以外の状況で、シグナルが複数回配信または受け入れられるかどうかは実装に依存します。

于 2012-09-17T19:12:16.623 に答える