我有一个析构函数需要被调用,即使程序被不当终止以确保外部进程终止。
目前我已经注册了调用的析构函数
std::atexit(killprocess);
std::at_quick_exit(killprocess);
然而,这意味着当程序完成但未终止时,进程不会被终止。有什么方法可以确保在退出时或程序完成但未终止时调用 killprocess 或析构函数?
编辑:已完成但未终止的状态来自 visual studio,它在末尾添加了一个等待条件。我相信这意味着使用 atexit 注册了 killprocess 过程析构函数不会在执行过程中自然地被调用
最佳答案
我觉得你问错了问题。您的目标实际上是找到一种方法来确保在父进程终止时外部进程也终止。但是仅仅依靠父进程中的一些函数调用是无法确保这一点的。父进程总是有可能陷入不一致状态,否则不可避免地无法调用此清理函数。因此,还有一些其他机制可以实现所需的行为,例如在子进程中处理某些类型的保活。例如,您可以从父进程提供管道,因此当它由于任何原因终止时,父进程管道末端将被系统自动关闭,子进程可以确定它需要退出。
关于c++ - 在退出或程序结束时执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44540679/