kcw*_*cwu 4 resources winapi process monitor
我想写一个程序,它将启动一个子进程.子进程可以是Windows模式或控制台模式程序.
我想监视子进程状态和资源使用情况.例如,我想知道子进程仍在运行或终止.如果它终止,我想知道原因(正常终止或因崩溃?).
在子进程运行和/或终止期间,我想知道它的资源使用情况,特别是CPU时间(用户时间,系统)和内存使用情况(虚拟大小和/或rss).如果数字不是很准确,那就没关系.
在Unix术语中,我想要fork,exec,waitpid和getrusage.而fork + 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);
}
Run Code Online (Sandbox Code Playgroud)
要获取正在运行的进程的退出代码,可以使用GetExitCodeProcess.但是,您需要解释错误代码的含义.0xC0000005是访问冲突的典型情况,但并非所有崩溃都会导致此错误代码.
对于资源使用,您可以调用GetProcessTimes来获取总CPU时间,使用GetGuiResources获取GDI句柄信息,使用GetProcessMemoryInfo获取内存统计信息,使用GetProcessIoCounters获取IO信息.
| 归档时间: |
|
| 查看次数: |
2015 次 |
| 最近记录: |