我有一个析构函数,即使该程序未正确终止也需要调用该析构函数,以确保外部进程死亡。
目前,我已注册要由调用的析构函数
std::atexit(killprocess);
std::at_quick_exit(killprocess);
但是,这意味着当程序完成但未终止时,该过程不会终止。有什么方法可以确保在退出时或在程序完成但未终止时调用killprocess或析构函数?
编辑:完成但未终止的状态来自Visual Studio,该状态在末尾添加了一个等待条件。我相信这意味着在执行过程中,这一点自然不会调用在atexit上注册过killprocess的进程析构函数
最佳答案
我认为您在问错问题。实际上,您的目标是找到一种方法,以确保在父流程死亡的情况下外部流程死亡。但是没有办法仅仅依靠父进程中的某些函数调用来确保这一点。父进程总是有可能陷入不一致状态,否则将不可避免地无法调用此清理功能。因此,还有其他一些机制可以实现所需的行为,例如在子进程中处理某些keepalive。例如,您可以从父流程提供管道,因此,无论出于何种原因终止,父流程管道的末端都会被系统自动关闭,子流程可以确定需要退出。