最後の命令として exit() を呼び出すシグナル ハンドラーを考えてみましょう。そのハンドラーで再入不可関数 (free() など) を呼び出しても安全ですか?
IMHOハンドラーが通常の実行シーケンスに戻らないという事実により、それは合法です。
前もって感謝します。
いいえ、これは違法です。それ以上に、呼び出す安全な関数はほとんどありません。
呼び出す安全な関数のリストがあります。http://linux.die.net/man/2/signal注のセクションを参照してください。
2 つのシグナルを区別する必要があります。デーモンに「リロード」するよう指示するシグナルと、デーモンを終了させるシグナル (「kill」) です。「kill」の場合、何も解放する必要はありません。あなたのプロセスは死ぬでしょう、OSはあなたが割り当てたものをすべてクリーンアップします。共有メモリを使用する場合は、再起動時にクリーンアップを行う必要があります。問題を引き起こす可能性のある "kill" ハンドラで何もしないでください。ただ死ぬ。
リロードの場合、ユーザーは「正常にシャットダウンする」ことを望んでいるため、好きな関数を呼び出すことができます。この場合、同じシグナルを再び受け取る可能性はほとんどありません (したがって、関数が再入可能かどうかは問題ではありません)。
関数への「入口」と関係がある再入可能性、および出口よりも前記関数によって維持される副作用と状態...
このマニュアルページを参照することをお勧めします。