我正在使用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