加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 04:01:12 所属栏目:Windows 来源:网络整理
导读:我想写一个程序,它将启动一个子进程.子进程可以是 Windows模式或控制台模式程序. 我想监视子进程状态和资源使用情况.例如我想知道子进程仍在运行或终止.如果它终止,我想知道原因(正常终止或因崩溃?). 在子进程运行和/或终止期间,我想知道它的资源使用情况,
我想写一个程序,它将启动一个子进程.子进程可以是 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);
}

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读