我想编写一个程序,这将启动一个子进程。子进程可以是窗口模式或控制台模式程序。

我要监控的子进程状态和资源使用情况。例如我想知道子进程仍在运行或终止。如果终止,我想知道的原因(通常还是因为撞车?终止)。

和子进程运行过程中和/或它终止,我想知道它的资源使用,特别是CPU时间(用户时间,系统)和存储器使用量(虚拟尺寸和/或RSS)。如果数字是不是很准确,是OK。

在Unix的术语,我想叉,EXEC,waitpid函数和的getrusage。叉+ setrusage + EXEC可以限制孩子的资源使用情况。但我不知道该怎么做这些在Windows平台上。

请点我的Windows API的名称。我可以学习其他自己。

不想使用除Windows API库等。喜欢它没有父工作作为调试器和连接到子进程。只是不喜欢,但仍是可接受的。

有帮助吗?

解决方案

当调用CreateProcess的,它返回的句柄处理。

WaitForSingleObject的上一个进程句柄将阻塞,直到过程已经退出或超时已过期。的零超时将立即返回并说明该过程仍在运行。

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

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

要得到一个正在运行的进程的退出代码,你可以使用GetExitCodeProcess。你需要解释的错误代码是什么意思,但是。 0000005是典型的访问冲突,但不是全部崩溃导致该错误代码。

有关资源使用情况,您可以拨打GetProcessTimes得到总的CPU时间,GetGuiResources得到GDI处理信息,GetProcessMemoryInfo让内存统计,并GetProcessIoCounters得到IO信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top