访问CPU/RAM使用情况(像任务管理器,但通过API!)?

2024-09-29 23:26:50 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种特定的方法可以用windowsapi访问“任务管理器”信息?我对这件事做了相当多的搜索,但似乎找不到一个API调用可以告诉我:

  • 给定进程的CPU/RAM使用率
  • 使用CPU/RAM最多的进程

有没有一种方法可以通过Python或C++访问这些信息(基本上,通过Windows API)?在

以下是我要做的(在伪代码中):

app x = winapi.most_intensive_process
app y = winapi.most_RAM_usage

print x.name
print y.name

Tags: 方法nameapi信息appmost管理器进程
3条回答

您可以使用PSAPI函数检索有关RAM使用情况的信息,尤其是^{}来查找系统中的所有进程,而{a2}则可以获取有关每个进程内存使用情况的信息。在

可以使用^{}检索每个进程的CPU使用情况。这并不总是完全准确,但我相信任务管理器在相同的情况下会以同样的方式产生不准确的结果。在

如果您需要,可以通过^{}获得整个系统内存使用情况的信息。在

可以使用以下Windows API在C/C++程序中检索各种进程计数器。在

它检索有关指定进程的内存使用情况的信息。在

BOOL WINAPI GetProcessMemoryInfo(
  _In_   HANDLE Process,
  _Out_  PPROCESS_MEMORY_COUNTERS ppsmemCounters,
  _In_   DWORD cb
);

在MSDN上有一个完整的示例,它解释了如何使用MSDN为您的进程检索此类信息。在

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682050%28v=vs.85%29.aspx

您已经提到,您希望连续获取信息(与任务管理器一样有一定的时间间隔)。要实现这一点,您可能需要在函数中写入完整的逻辑(在MSDN中提到),并在一段时间延迟(Sleep(1second))后调用它。这样,您应该能够获取程序的所有这些信息,直到它执行为止。在

您可以使用^{}库,而不是直接调用windowsapi,它是一个跨平台的库,提供有关进程的大量信息。 它可以在Windows、Linux、macos、BSD和sunsolaris上运行,并可以在python 2.4到3.4之间以32位和64位的方式工作。在

尤其是它的^{}类有以下有趣的方法:

  • ^{}:进程从一开始就花费的用户和系统计时。在
  • ^{}:自上次调用后或给定间隔内cpu利用率的百分比
  • ^{}:关于Ram和虚拟内存使用的信息。注意:文档明确指出这些是taskmgr.exe所显示的,因此它看起来正是您想要的。在
  • ^{}:扩展内存信息。在
  • ^{}:进程使用的内存百分比。在

要遍历所有进程(例如,为了找到最需要CPU/内存的进程),可以只迭代^{}。在


以下是您想要实现的简单实现:

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)

在我的系统上运行的示例:

^{pr2}$

相关问题 更多 >

    热门问题