【问题标题】:Windows in atexit() handler getting the current process exit code set by ::exit()atexit() 处理程序中的 Windows 获取由 ::exit() 设置的当前进程退出代码
【发布时间】: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++


【解决方案1】:

获取退出代码的最简单方法是另一个保护进程。 如果这不是一个选项,您可以挂钩 ExitProcess 函数并从中获取退出代码。

【讨论】:

  • 谢谢。我认为 ExitProcess 有点太晚了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2016-11-16
相关资源
最近更新 更多