2011-01-27 39 views
0

當我在程序中捕獲到SIGINT信號時,如何安全地清理資源? 在信號處理函數就不可能叫delete運營商,因爲我不知道如何釋放與new運營商創建的資源。如何處理SIGINT?

任何想法?

+0

其他信息和代碼示例在這裏:http://stackoverflow.com/questions/4250013/is-destructor-called-if-sigint-or-sigstp-issued – 2011-01-27 03:48:45

+0

你是什麼意思,它是不可能調用`刪除`? – 2011-01-27 03:54:34

+1

由於SIGINT可能異步發生,因此在內存管理任務期間堆可能不一致? `delete`是由一個信號處理程序調用的,它會中斷對`new`的調用會發生什麼? – 2011-01-27 03:59:52

回答

1

如果您的應用程序關閉,不用擔心內存。無論如何,操作系統會拋棄它。

您需要在信號處理程序中清理的東西是否會超出您的流程 - 例如,如果您創建的子流程需要退出,那麼您應該告訴它這樣做。

1

一般情況下,你不希望在除了設置將你的程序的其它部分反應,以一個布爾標誌信號處理程序在很多都做,通常導致一些循環告吹,並允許熟悉的方法在不涉及信號的情況下按順序關機。使用此標誌來協調關閉的原因是,某些庫函數避免了異步信號處理期間需要安全重入的妥協。即使一些使用線程特定內存的線程安全函數也可能無法應對異步重入。快速搜索在http://book.chinaunix.net/special/ebook/addisonWesley/APUE2/0201433079/ch10lev1sec6.html#ch10lev1sec6發現了一些關於安全功能的討論。