How to know the CPU and memory usage of a process

2019-02-03 06:47发布

问题:

I am using a wmi and python in order to track the behavior of the process running on my machine.

from win32com.client import GetObject
wmi = GetObject('winmgmts:')
processes = wmi.InstancesOf('Win32_Process')

for process in processes:
    print process.ProcessId, process.Name 

The Win32_Process has a lot of information but I don't see anything for tracking the CPU consumption. The window Task Monitor is showing this info so I think it is possible to get it.

I thought that the WorkingSetSize property is giving the memory consumption of the process but I can see different value from what is given by TaskMonitor.

How to get these 2 values for a given process?

Update: Task Monitor shows the PrivateWorkingSetSize which seems to be not available with the Win32_Process. What is the difference betwen WorkingSetSize and PrivateWorkingSetSize?

回答1:

I'm pretty sure you want the WMI perf classes Win32_PerfFormattedData_PerfProc_Process or Win32_PerfRawData_PerfProc_Process

E.g. their properties PercentProcessorTime and WorkingSet

Note that the Perf classes take a bit effort to understand.

  • There are gotchas with the Formatted versions (See Hey, Scripting Guy! article Why Does My Performance Monitoring Script Keep Returning the Same Incorrect Values?)
  • And the Raw Data classes need care to translate the "CounterType" into the right math formula to use to calculate the values based on the raw data. See How's My Driving? Monitoring Performance Using WMI for a starting place.

But those WMI classes should give you all the info you're looking for.



回答2:

Please see:

  • WMI Made Easy For C#

  • How to get current CPU and RAM usage in Python?

Might also be of interest:

  • Get current memory utilisation of a process running on a remote machine with WMI


回答3:

Win32_Process also has UserModeTime and KernelModeTime which can be used to calculate CPU usage

Also look at http://technet.microsoft.com/en-us/library/ee176718.aspx



标签: windows wmi