如何在Windows系统中了解子进程状态和资源使用情况?

4
我想编写一个程序,启动一个子进程。该子进程可以是Windows模式或控制台模式程序。
我想监视子进程的状态和资源使用情况。例如,我想知道子进程是否仍在运行或已终止。如果它已经终止,我想知道原因(是正常终止还是崩溃?)。
在子进程运行期间和/或其终止时,我想了解其资源使用情况,特别是CPU时间(用户时间、系统时间)和内存使用情况(虚拟大小和/或rss)。如果数字不是非常准确也可以。
用Unix术语来说,我想要fork、exec、waitpid和getrusage。而fork+setrusage+exec可以限制子进程的资源使用。但我不知道如何在Windows平台上实现这些。
请告诉我Windows API名称。我可以自己学习其余部分。
除了Windows API之外,最好不要使用其他库。不希望父进程作为调试器并附加到子进程。虽然不是首选,但仍然可接受。
1个回答

8
当您调用CreateProcess时,它会返回一个进程句柄。
在进程句柄上使用WaitForSingleObject将阻塞,直到进程退出或超时。超时为零将立即返回,并指示进程是否仍在运行。
BOOL IsProcessRunning(HANDLE process)
{
    return WaitForSingleObject(process, 0) != WAIT_OBJECT_0;
}

void WaitForProcessToExit(HANDLE process)
{
    WaitForSingleObject(process, INFINITE);
}

要获取正在运行的进程的退出代码,您可以使用GetExitCodeProcess。但是,您需要解释错误代码的含义。0xC0000005通常表示访问冲突,但并非所有崩溃都会导致此错误代码。

对于资源使用情况,您可以调用GetProcessTimes来获取总CPU时间,调用GetGuiResources来获取GDI句柄信息,调用GetProcessMemoryInfo来获取内存统计信息,并调用GetProcessIoCounters来获取IO信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接