我正在使用std :: unique_ptr來管理某些內存。當我的進程正常退出時,這可以正常工作,因爲我可以看到正在調用的相關構造函數和析構函數。但是,當使用SIGTERM處理進程時,我看不到被調用的析構函數。當進程通過信號終止時,std :: unique_ptr的這種預期行爲是什麼?有什麼辦法可以解決這個問題嗎?提前致謝!智能指針在進程死亡時的行爲
回答
這是可以預料的:默認的信號處理程序將在您的進程中有效地調用exit()
,這將終止進程。爲了解決這個問題,你應該安裝一個信號處理器,並在接收信號時採取適當的行動。
我正在使用signal_handler來捕獲信號並在同一個內部調用exit(0)。不應該導致unique_ptr爲其存儲的指針調用析構函數嗎? – wishywashy
@wishywashy:請參閱[std :: exit](http://en.cppreference.com/w/cpp/utility/program/exit),特別是:*「堆棧未解開:自動存儲的變量析構函數持續時間](http://en.cppreference.com/w/cpp/language/storage_duration)不會被調用。「* – IInspectable
程序在被致命信號終止後的行爲更接近調用'_exit'而不是'exit '。它不**運行'atexit'處理程序。 – Brian
- 1. 當python進程死亡時運行atexit()
- 2. 在python線程死亡時?
- 3. SQLAlchemy - 插入> 1M行 - 進程死亡
- 4. Nohup java進程超時或死亡
- 5. node.js進程何時意外死亡?
- 6. 進程已經死亡
- 7. 智能指針在智能指針管理數組內
- 8. Boost智能指針
- 9. C++智能指針
- 10. 指針和智能指針的區別
- 11. 當應用程序死亡時殺死外部進程
- 12. 如何啓動其他父進程時死亡的進程?
- 13. 確保子進程在Cocoa中死亡
- 14. Node.js進程在aws實例上死亡
- 15. C++中的智能指針
- 16. 智能指針代替指針
- 17. android遠程進程(receiver)快速死亡
- 18. 追蹤子進程的死亡
- 19. 確保子進程在退出Python程序時死亡
- 20. Boost智能指針和線程
- 21. 獲取智能指針的指針指針
- 22. nohup進程在xterm關閉時死亡,但不在出口
- 23. GMP和智能指針
- 24. C++:實現智能指針
- 25. 智能指針與PythonQt
- 26. C++智能指針表現
- 27. 激活智能指針?
- 28. 智能指針::地圖
- 29. 二叉樹智能指針
- 30. 智能指針三規則?
可能的重複https://stackoverflow.com/questions/4250013/is-destructor-called-if-sigint-or-sigstp-issued –
也相關https://stackoverflow.com/questions/9033931/memory-leak -c/9034141 –
雖然user268396的回答是正確的,但您應該意識到正確編寫信號處理程序非常困難。例如,從信號處理程序中訪問大多數全局變量是非法的。如果你想知道如何做到這一點,我建議發佈一個新的問題。 – Brian