出现术语信号时的 Windows 进程退出代码

Wer*_*mus 1 c c++ powershell winapi

在Unix/Linux环境中,很容易确定程序是否由于信号中断(sigterm)而退出,以及是哪个信号中断。

可以确定(以编程方式使用 API 或退出代码)Windows 程序是否因信号(sigkill,以 powershell 为例)而退出?

扩展我的问题:

  • 用户是否可以通过任务管理器或 powershell 等方式终止应用程序???
  • 如果应用程序没有响应并且操作系统终止了该应用程序,那么它的退出代码是什么???

Windows 有“很多很多”错误代码,我想知道哪些错误代码仅与进程管理相关。

亲切的问候,

shf*_*301 5

不,没有,因为 Windows 没有信号。使用 API 终止进程TerminateProcess

TerminateProcess所有调用者都会传递退出代码,但没有记录 powershell 或任务管理器将其设置为的值。

Windows 没有定义任何进程退出代码,应用程序可以使用它想要的任何退出代码。没有要检查的“流程管理错误代码”。

直接回答您的问题:

用户是否可以通过任务管理器或 powershell 等方式终止应用程序?

是的。kill您可以从任务管理器、powershell 使用或Stop-Process使用taskkill命令行来终止进程。

如果应用程序没有响应并且操作系统终止了该应用程序,那么它的退出代码是什么?

对此没有保证的退出代码。Windows 可能会将其设置为某个值,但这是一个实现细节,并且可以在不同版本的 Windows 之间进行更改。

  • 是的,当进程被例如 TaskManager 终止时,没有定义/记录的退出代码。然而,TaskManager 使用一个“已知”退出代码,该代码适用于许多 Windows 版本(如果不是全部),这是 1。然后是 `GenerateConsoleCtrlEvent`。这与 UNIX 信号并非 100% 相同,但非常相似。如果程序通过“GenerateConsoleCtrlEvent”发出信号,它可能会决定终止 - 在这种情况下,退出代码当然取决于程序。 (3认同)