如何将任务列表的CPU时间转换为CPU%使用率?

时间:2008-10-15 22:41:45

标签: batch-file cpu-usage tasklist

我正在尝试使用tasklist来查找哪个进程消耗的CPU超过了我的CPU的百分比(以后用taskkill将其终止。)

我如何知道时间格式代表的百分比?

文件说:

TASKLIST options

/FI   filter               

一个过滤器可能是:

CPUTIME         eq, ne, gt, lt, ge, le        CPU time in the format: hh:mm:ss.
                                              hh - number of hours,
                                              mm - minutes, ss - seconds

如果我尝试

tasklist /FI "CPUTIME gt 00:00:10" 

它有效。

但如果我

tasklist /FI "CPUTIME gt 90"

它没有。

我怎么知道时间格式代表90%?还是80%? CPU使用时间与CPU使用百分比之间的关系是什么?

3 个答案:

答案 0 :(得分:17)

使用任务列表看起来并不是一种简单的方法,所以我建议使用VBscript或其他脚本语言,或使用不同的方法。如果您受限于批处理文件,那么您可以使用WMIC命令获取正在运行的进程列表及其各自的CPUTime:

C:\> wmic path Win32_PerfFormattedData_PerfProc_Process get Name,PercentProcessorTime

Name                 PercentProcessorTime
Idle                 0
System               0
Smss                 0
csrss                0
winlogon             0
services             0
lsass                0

[...]

wmiprvse             100
wmic                 0
_Total               100

请注意,在我的测试中,这显示wmipsrv.exe具有100%的CPU,因为它在执行WMI查询时飙升。您应该在脚本中考虑到这一点,否则您最终会不断尝试杀死WMI服务;)

参考:
http://waynes-world-it.blogspot.com/2008/09/useful-general-command-line-operations.html
http://technet.microsoft.com/en-us/library/bb742610.aspx

答案 1 :(得分:1)

任务列表不会告诉您该进程已经运行了多长时间。 它告诉您各种进程占用了多少CPU时间。 要获得一个百分比(这将是一个平均百分比),您需要知道您的进程已经运行了多长时间。 例如,您可以间隔10秒拍摄快照,减去时间,然后找到最接近数字10的进程CPUTIME。(是CPU核心数的10倍吗?不确定...)

答案 2 :(得分:-3)

任务列表的CPUTime衡量自流程开始以来已经使用了多少CPU时间(周期),因此要将其转换为百分比,它将是

 (TotalProcessRuntime / CpuTime) / 100

至少,这就是我收集的内容:)