我正在制作一个程序来检查现有进程并返回其退出代码...如果它是一个退出代码。如果程序出错,它会返回 -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 可以返回退出代码或异常值。我不想要异常值!如果过程出错,我想返回 -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 可能是崩溃。
关于c - 我如何知道我是否从 GetExitCodeProcess 获得了实际的退出代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57166997/