I'm trying to use tasklist
to find out which process is consuming more than X percent of my CPU (to later kill it with taskkill
.)
How do I know what percent a time format represents?
The documentations says:
TASKLIST options
/FI filter
And one filter may be:
CPUTIME eq, ne, gt, lt, ge, le CPU time in the format: hh:mm:ss.
hh - number of hours,
mm - minutes, ss - seconds
If I try
tasklist /FI "CPUTIME gt 00:00:10"
it works.
But if I
tasklist /FI "CPUTIME gt 90"
it doesn't.
How can I know that time format represent 90%? Or 80%? What's the relationship between CPU usage time and the CPU usage percent?
Tasklist's CPUTime is a measure of how much CPU time (cycles) have been used since the start of the process, so to convert that to a percent, it would be
(TotalProcessRuntime / CpuTime) / 100
At least, thats what I gather :)
It doesn't look like there's an easy way to do this with tasklist, so I would suggest either doing this in VBscript or another scripting language, or using a different approach. If you're constrained to batch files then you could use the WMIC command to get the list of running processes with their respective 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
Note that this in my testing showed wmipsrv.exe as having 100% CPU, because it spiked while executing the WMI query. You should account for that in your script or you'll end up trying to kill the WMI service constantly ;)
Reference:
http://waynes-world-it.blogspot.com/2008/09/useful-general-command-line-operations.html
http://technet.microsoft.com/en-us/library/bb742610.aspx
来源:https://stackoverflow.com/questions/206805/how-to-convert-a-tasklists-cpu-time-to-cpu-usage