プログラムでSIGINTシグナルをキャッチした場合、どうすればリソースを安全にクリーンアップできますか?シグナルハンドラ関数ではdelete
、演算子で作成されたリソースを解放する方法がわからないため、演算子を呼び出すことができませんnew
。
何か案は?
アプリケーションがシャットダウンしている場合でも、メモリについて心配する必要はありません。とにかく終了すると、OSはそれをすべて破棄します。
シグナルハンドラでクリーンアップする必要があるのは、プロセスよりも長持ちするものです。たとえば、作成した子プロセスも終了する必要がある場合は、終了するように指示する必要があります。
一般に、プログラムの他の部分によって反応されるブールフラグを設定する以外は、シグナルハンドラーで多くのことを実行する必要はありません。通常、一部のループが失敗し、使い慣れたアプローチで正常にシャットダウンできます。信号を含まない場合に使用します。このフラグを使用してシャットダウンを調整する理由は、一部のライブラリ関数が、非同期信号の処理中に安全に再入力するために必要な妥協を回避するためです。スレッド固有のメモリを使用する一部のスレッドセーフ関数でさえ、非同期再突入に対応できない場合があります。クイック検索では、http://book.chinaunix.net/special/ebook/addisonWesley/APUE2/0201433079/ch10lev1sec6.html#ch10lev1sec6で安全な機能に関するいくつかの議論が見つかりました。