我正在制作一个程序,用于检查现有流程并返回其退出代码... 如果,这是一个退出代码。如果程序出错,则返回-1。
我现在的代码如下:
HANDLE hProcess = OpenProcess( SYNCHRONIZE | PROCESS_QUERY_INFORMATION, FALSE, pid );
if(!hProcess) {
switch (GetLastError()) {
//Handle errors and such
}
} else {
WaitForSingleObject(hProcess, INFINITE);
int exit_code;
GetExitCodeProcess(hProcess, &exit_code);
return exit_code;
}
但是,正如documentation所说,GetExitCodeProcess可以返回退出代码或EXCEPTION VALUE。我不要异常值!如果过程出错,我想返回-1!
有什么办法可以区别吗?有没有一种简单的方法可以告诉您进程已崩溃?
答案 0 :(得分:1)
除非您对其进行调试,否则我认为您无法从过程中得知。
忽略线程,从概念上讲,您可以这样想:
MainThread(EXE*exe)
{
__try
{
NTDLL_LoadDlls(exe);
int retval = exe->WinMain();
ExitThread(retval); // Exits the process if there is only one thread
}
__catch(...)
{
int exceptcode = getexceptioncode();
WER_ReportCrash(exe, exceptcode);
TerminateProcess(GetCurrentProcess(), exceptcode);
}
}
0通常表示成功,1表示一般性失败,其他任何情况都可能是一个问题。低代码(<= 255)可能具有含义,但它们是程序特定的。 > = 0xC0000000可能是当机。