【发布时间】:2019-11-27 10:19:24
【问题描述】:
我在 linux 上使用on_exit(),函数获取退出代码作为参数。我想在 Windows 上实现相同的功能,但没有提供此功能的 API。
我的想法是打电话给GetExitCodeProcess(GetCurrentProcess(), &exitcode),但它给了我STILL_ACTIVE (259)。
在文档 (https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-exitprocess) 中指出,最后一件事发生在退出期间,真正的退出代码替换了 STILL_ACTIVE。
我可以以某种方式检索真正的退出代码吗?我知道::exit() 被调用了,因为正在运行的函数是由atexit() 注册的。
【问题讨论】:
-
在 Windows 上没有等效项,结构上不合理,因为进程可以因退出 main() 以外的原因终止。没有 atexit() 函数运行,退出代码设置为终止原因。如果有必要,请使用单独的保护进程。
-
保护进程是一个 100% 的好主意,但在我的情况下这是不可行的。我什至不在乎处理程序是否不在 _exit() 上运行,只要处理程序正在运行,退出代码(到目前为止已知)就足够了。 如果我已经在处理程序中,我知道进程已经开始退出阶段,并且退出代码是已知的(如果其他处理程序设置不同,可能会改变,但这并不重要)。
标签: c++ windows winapi visual-c++