如何知道Windows上的子进程状态和资源使用情况?

kcw*_*cwu 4 resources winapi process monitor

我想写一个程序,它将启动一个子进程.子进程可以是Windows模式或控制台模式程序.

我想监视子进程状态和资源使用情况.例如,我想知道子进程仍在运行或终止.如果它终止,我想知道原因(正常终止或因崩溃?).

在子进程运行和/或终止期间,我想知道它的资源使用情况,特别是CPU时间(用户时间,系统)和内存使用情况(虚拟大小和/或rss).如果数字不是很准确,那就没关系.

在Unix术语中,我想要fork,exec,waitpid和getrusage.而fork + setrusage + exec可以限制孩子的资源使用.但我不知道如何在Windows平台上执行这些操作.

请指出Windows API名称.我自己可以研究其余的.

不希望使用Windows API以外的库.首选它不是父作为调试器工作并附加到子进程.只是不喜欢,但仍然可以接受.

Mic*_*ael 8

当您调用CreateProcess时,它将返回该进程的句柄.

进程句柄上的WaitForSingleObject将阻塞,直到进程退出或超时已过期.超时为零将立即返回并指示进程是否仍在运行.

BOOL IsProcessRunning(HANDLE process)
{
    return WaitForSingleObject(process, 0) != WAIT_OBJECT_0;
}

void WaitForProcessToExit(HANDLE process)
{
    WaitForSingleObject(process, INFINITE);
}
Run Code Online (Sandbox Code Playgroud)

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

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