有没有办法让 Process.TotalProcessorTime 反映一个进程 PLUS 它产生的任何进程?
或者,我如何验证进程(或它的后代)是否仍在“主动”运行?
我的应用程序正在生成一个外部进程并等待它退出。使用样本数据需要5-20 分钟才能完成;我没有猜测合理的最大超时时间。所以我的应用程序会定期检查另一个进程的 Process.TotalProcessorTime 值,以确保它不断上升。
这很好用,但我发现这个过程只是一个“包装器”,它产生一个子进程,从而产生一些消耗所有CPU时间的其他子进程。
我发现 TotalProcessorTime 在100%CPU利用率的几分钟后才返回一小部分秒。
答案 0 :(得分:0)
您可以使用性能计数器来检索父流程,如下所示:
PerformanceCounter pc = new PerformanceCounter("Process",
"Creating Process Id", " windbg");
Process p = Process.GetProcessById((int)pc.RawValue);
拥有该信息可以监视系统中的进程,维护整个进程树的结构并计算树的TotalProcessorTime。希望有所帮助
答案 1 :(得分:0)
我没有实现这一点,但已经弄清楚它是如何工作的。这很乏味,但并不是那么复杂。
每隔几秒钟产生一个后台线程:
这应该允许调用代码轻松检查进程(树) 没有挂起( I / O绑定进程可能在这里有问题,但这不适用 对我来说)。
这一切似乎都不困难,可能的例外是监控线程没有(直接)生成进程的CPU使用率。
如果/当我实现代码时,我会更新此答案,但可能需要很长时间。