我有一个析构函数,即使程序被不正确地终止也需要被调用,以确保外部进程死掉。
目前我已经注册了要由
调用的析构函数std::atexit(killprocess);
std::at_quick_exit(killprocess);
然而,这意味着当程序完成但未终止时,该过程不会被终止。有没有办法确保在退出时或程序完成但未终止时调用killprocess或析构函数?
编辑:已完成但未终止的状态来自visual studio,最后会添加等待条件。我相信这意味着已经使用atexit注册了killprocess进程析构函数在执行过程中不会被这一点自然调用
答案 0 :(得分:1)
我认为你问的是错误的问题。您的目标实际上是找到一种方法来确保外部进程在父进程死亡时死亡。但是没有办法通过依赖父进程中的某些函数调用来确保这一点。父进程总是有可能陷入不一致状态,或者不可避免地无法调用此清理函数。因此,还有一些其他机制可以实现所需的行为,例如在子进程中处理某些类型的keepalive。例如,您可以从父进程提供管道,因此当它因任何原因终止时,系统会自动关闭父进程管道端,并且子进程可以确定它需要退出。
答案 1 :(得分:1)
std :: atexit注册的退出处理程序应在正常进程结束时调用。如果不是这样,那么你必须到别处去看看。 请参阅std::atexit的文档。也许你想设置std::set_terminate处理程序。 某些程序结尾无法处理,因此如果您想确定,则必须采用某种外部监控。评论中已经很少有想法。