用Windows API访问“任务pipe理器”信息的具体方法是什么? 我已经做了一些相关的调查,但是我似乎无法find一个API调用来告诉我:
有没有办法通过Python或C ++(基本上,通过Windows API)访问这些信息?
这是我本质上想要做的(伪代码):
app x = winapi.most_intensive_process app y = winapi.most_RAM_usage print x.name print y.name
而不是直接调用Windows API,可以使用psutil
库,这是一个跨平台的库,提供了大量有关进程的信息。 它可以在Windows,Linux,Mac OS,BSD和Sun Solaris上运行,并且可以在32位和64位两种格式下使用2.4到3.4的Python。
特别是它的Process
类有以下有趣的方法:
cpu_times
:进程从其开始花费的用户和系统时间。 cpu_percent
:自上次调用或在给定时间间隔内的CPU利用率百分比 memory_info
:关于RAM和虚拟内存使用情况的信息。 注意 :文档明确指出这些是由taskmgr.exe
显示的,所以它看起来像你想要的。 memory_info_ex
:扩展的内存信息。 memory_percent
:进程使用内存的百分比。 要遍历所有进程(例如为了找到最多的CPU /内存饿),你可以遍历process_iter
。
以下是您想要实现的简单实现:
import psutil def most_intensive_process(): return max(psutil.process_iter(), key=lambda x: x.cpu_percent(0)) def most_RAM_usage(): return max(psutil.process_iter(), key=lambda x: x.memory_info()[0]) x = most_intensive_process() y = most_RAM_usage() print(x.name) print(y.name)
在我的系统上运行示例:
In [23]: def most_intensive_process(): ...: # psutil < 2.x has get_something style methods... ...: return max(psutil.process_iter(), key=lambda x: x.get_cpu_percent(0)) ...: ...: def most_RAM_usage(): ...: return max(psutil.process_iter(), key=lambda x: x.get_memory_info()[0]) In [24]: x = most_intensive_process() ...: y = most_RAM_usage() ...: In [25]: print(x.name, y.name) firefox firefox
您可以使用PSAPI函数(尤其是EnumProcesses
查找有关RAM使用情况的信息,以查找系统中的所有进程,使用GetProcessMemoryInfo
获取有关每个进程内存使用情况的信息。
您可以使用GetProcessTimes
检索每个进程的CPU使用情况。 这并不总是完全准确的,但是我相信任务管理器在相同的情况下产生的结果是不准确的。
如果您需要,系统作为一个整体的内存使用信息可以通过GetPerformanceInfo
。
您可以使用以下Windows API在C / C ++程序中检索各种进程计数器。
它检索有关指定进程的内存使用情况的信息。
BOOL WINAPI GetProcessMemoryInfo( _In_ HANDLE Process, _Out_ PPROCESS_MEMORY_COUNTERS ppsmemCounters, _In_ DWORD cb );
在MSDN上有一个完整的例子,它解释了如何用它来检索你的进程的这些信息。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682050%28v=vs.85%29.aspx
你已经提到你想连续获取信息(有一些时间间隔作为任务管理器)。 为了达到这个目的,你可能需要在一个函数内写入完整的逻辑(在MSDN中提到),并在一段时间后( Sleep(1秒))调用它。这样,你应该能够获取你的程序的所有信息,直到它执行。