c - 我如何知道我是否从 GetExitCodeProcess 获得了实际的退出代码?
问题描述
我正在制作一个程序来检查现有进程并返回其退出代码......如果它是退出代码。如果程序出错,则返回 -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;
}
但是,正如文档所述,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 可能是崩溃。
推荐阅读
- python - 从桌面路径显示图像
- python - 如何在 NetworkX 中读取语义图?
- mysql - 需要重命名一列中的数据,MySQL
- c++ - 如何测试注册表项是否存在?
- jmeter - Jmeter不发送名为Cookie的标头
- node.js - Express:提供依赖于 cookie 的静态文件
- php - 将自定义数据从购物车项目传递到 Woocommerce 3 中的 Order 元数据
- apache-spark - ColumnarBatch DataSource 因下推列而失败
- python - 迭代列表中每个对象的成员值的最佳方法是什么?
- scala - 在火花中循环加载文件