如何使用 WMI 了解进程的 CPU 和内存使用情况?

Posted

技术标签:

【中文标题】如何使用 WMI 了解进程的 CPU 和内存使用情况?【英文标题】:How to know the CPU and memory usage of a process with WMI? 【发布时间】:2010-12-01 08:28:20 【问题描述】:

我正在使用 wmi 和 python 来跟踪在我的机器上运行的进程的行为。

从 win32com.client 导入 GetObject wmi = GetObject('winmgmts:') 进程 = wmi.InstancesOf('Win32_Process') 对于进程中的进程: 打印 process.ProcessId, process.Name

Win32_Process 有一个lot of information,但我没有看到任何用于跟踪 CPU 消耗的信息。窗口任务监视器正在显示此信息,因此我认为可以获取它。

我认为 WorkingSetSize 属性给出了进程的内存消耗,但我可以看到与 TaskMonitor 给出的不同的值。

如何获取给定进程的这两个值?

更新: 任务监视器显示 Win32_Process 似乎不可用的 PrivateWorkingSetSize。 WorkingSetSize 和 PrivateWorkingSetSize 有什么区别?

【问题讨论】:

【参考方案1】:

请看:

WMI Made Easy For C#

How to get current CPU and RAM usage in Python?

也可能感兴趣:

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

【讨论】:

感谢您的回答。不幸的是,这个问题没有回答我的问题。 Win32_Process 对象是否提供进程的 cpu 使用率? “WMI Made Easy for C#”链接似乎失效了。 现在工作 - 谢谢。希望它在其他人自己的谷歌搜索中证明是有用的。 :)【参考方案2】:

我很确定您想要 WMI 性能类 Win32_PerfFormattedData_PerfProc_Process 或 Win32_PerfRawData_PerfProc_Process

例如它们的属性 PercentProcessorTimeWorkingSet

请注意,Perf 类需要花费一些精力才能理解。

格式化版本存在一些问题(请参阅嘿,脚本专家! 文章 Why Does My Performance Monitoring Script Keep Returning the Same Incorrect Values?) 原始数据类需要注意将“CounterType”转换为正确的数学公式,以用于根据原始数据计算值。请参阅 How's My Driving? Monitoring Performance Using WMI 了解起点。

但是那些 WMI 类应该会为您提供您正在寻找的所有信息。

【讨论】:

这正是我想要的!非常感谢【参考方案3】:

Win32_Process 也有 UserModeTime 和 KernelModeTime 可以用来计算 CPU 使用率

也看http://technet.microsoft.com/en-us/library/ee176718.aspx

【讨论】:

以上是关于如何使用 WMI 了解进程的 CPU 和内存使用情况?的主要内容,如果未能解决你的问题,请参考以下文章

java 如何获得一个进程的内存使用情况,cpu运行的时间

WMI 查询服务导致服务器CPU非常高!

分析Linux上长时间运行的进程的资源使用情况——CPU、内存、硬盘驱动器?

c#中的进程统计

如何获取当前进程的CPU使用率,内存使用率

C#获取特定进程CPU和内存使用率