2012-01-20 7 views
2

理論的には、signal()を使用してSIGINTのハンドラを関連付けます。このシグナルが処理されると、つまりシグナルハンドラが実行されると、デフォルトでは同じシグナルがブロックされます。ブロックする理由は何ですか?それはデッドロックのような状況につながっていますか?親切に明確にする。シグナルハンドラが同じシグナルを扱う際になぜブロックされるのですか

答えて

3

シグナルハンドラはリエントラントではないと予想されるためです。

シグナルハンドラは、一般的にすばやく実行され、唯一の安全な機能非同期(async)を呼び出す必要があり、機能のすなわち、非常に制限されたセット、signal(7)を参照してください。

通常、内部で呼び出し可能にしたくない場合があります。

あなたは信号から正常に戻る(またはその内部siglongjmpを行う)していない場合を除き、前のシグナルマスクが完成したシグナルハンドラの後に復元されます。

しかし、あなたは自分自身をブロックしません(sigactionスルー)シグナルハンドラをインストールすることができます。同様の理由

は、通常のプロセッサで、intteruptハンドラもすばやく実行されていると割り込みを無効にしています。

関連する問題