Windows处理术语信号时的退出代码

时间:2015-08-07 18:01:11

标签: c++ c powershell winapi

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

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

扩展我的问题:

  • 用户是否可以从任务管理器或PowerShell中删除应用程序? ??
  • 如果应用程序没有响应且操作系统杀死了应用程序,它的退出代码是什么? ??

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

亲切的问候,

2 个答案:

答案 0 :(得分:4)

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

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

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

直接回答您的问题:

  

用户是否可以从任务中杀死应用程序   经理,还是来自powershell?

是的。您可以从任务管理器中终止进程,powershell使用killStop-Process或使用命令行中的taskkill

  

如果应用程序没有响应且操作系统杀死了应用程序,   它的退出代码是什么?

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

答案 1 :(得分:3)

  

用户是否可以从任务管理器或PowerShell中删除应用程序。

是。

  

如果应用程序没有响应且操作系统杀死了应用程序,那么它的退出代码是什么。

操作系统不会杀死应用程序。用户可以选择这样做,有时是在OS的提示下。在这种情况下,未定义退出代码。

当应用程序正常终止时,它会设置退出代码。退出代码是特定于流程的。唯一的惯例是0意味着成功。之后,这是一个垃圾射击。

TerminateProcess强制终止应用程序时,终结符会将调用中的退出代码传递给TerminateProcess