c++ - 在退出或程序结束时执行函数

标签 c++ c++14 destructor atexit

我有一个析构函数需要被调用,即使程序被不当终止以确保外部进程终止。

目前我已经注册了调用的析构函数

std::atexit(killprocess);
std::at_quick_exit(killprocess);

然而,这意味着当程序完成但未终止时,进程不会被终止。有什么方法可以确保在退出时或程序完成但未终止时调用 killprocess 或析构函数?

编辑:已完成但未终止的状态来自 visual studio,它在末尾添加了一个等待条件。我相信这意味着使用 atexit 注册了 killprocess 过程析构函数不会在执行过程中自然地被调用

最佳答案

我觉得你问错了问题。您的目标实际上是找到一种方法来确保在父进程终止时外部进程也终止。但是仅仅依靠父进程中的一些函数调用是无法确保这一点的。父进程总是有可能陷入不一致状态,否则不可避免地无法调用此清理函数。因此,还有一些其他机制可以实现所需的行为,例如在子进程中处理某些类型的保活。例如,您可以从父进程提供管道,因此当它由于任何原因终止时,父进程管道末端将被系统自动关闭,子进程可以确定它需要退出。

关于c++ - 在退出或程序结束时执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44540679/

相关文章:

c++ - 我应该在构造函数初始化列表中使用列表初始化吗?

c++ - 为 vector 的 vector 提供平坦迭代器的优雅方式

c++ - 析构函数和 noexcept

c++ - g++ 说引用未定义,即使 `nm` 在我的目标文件中列出了符号定义

c++ - C++ 中的字符串流

c++ 埃拉托色尼筛法我的代码很慢

c++ - 放一个常量析构函数有用吗?

c++ - 如何从 C++ 中的主函数访问类中的私有(private)构造函数?

c++ - `std::basic_string::operator[]` 能否返回一个 "distant"保护页 nul 终止符?

c++ - 析构函数的使用 = 删除;