linux - 如何使用 Python(独立于操作系统)获取 pid 列表和有关 PID 的信息?
问题描述
我正在一个项目中工作,该项目需要为每个进程获取一个 PID 列表:
- 进程名称
- 进程开始时间
- 内存和 CPU 使用率
我在这个项目中使用 Python,我需要它在 Windows 和 **ix 上工作。
我对 SO(列出在 64 位 Windows 上运行的进程)进行了一些研究,但该解决方案特定于 Windows 操作系统。我不知道下一步该去哪里或使用哪个模块。
谢谢你的建议。
解决方案
如前所述,psutil
似乎是满足您需要的最佳工具:
https ://github.com/giampaolo/psutil#process-management
以下是如何检索数据的示例:
from datetime import datetime
import psutil
# Getting the list of all processes (as a list, or with other attributes)
list_pids = psutil.pids()
for proc in psutil.process_iter(attrs=['pid', 'name', 'memory_percent']):
print(proc.info)
print("===SINGLE PROCESS==")
try:
notepad = subprocess.Popen("notepad.exe")
pid = notepad.pid
sleep(0.5)
# We get a "Process" from the PID
process = psutil.Process(pid)
# We can then retrieve different information on the processs
print(f"NAME: {process.name()}")
print(f"ID: {process.pid}")
print(f"STATUS: {process.status()}")
print(f"STARTED: {datetime.fromtimestamp(process.create_time())}")
print(f"CPU: {process.cpu_percent(interval=1.0)}%")
print(f"MEMORY %: {process.memory_percent():.1f}%")
finally:
notepad.kill()
推荐阅读
- angular - 如何最好地设计我的 Angular2+ 投资组合基础架构
- python - 如何避免python类方法中的无限递归
- java - Chronicle Queue - readDocument().isPresent() 在值存在时返回 false
- mysql - 多对多关系 Laravel 与不同的值、产品属性
- reactjs - 检查是否使用 Jest 在 axios 拦截器中调用调度操作
- c# - !(x is null) 和 x is object 之间有区别吗
- ios - 为什么 UISearchController 会改变导航栏的颜色?
- apache-spark - 如何让 AWS 上的本地 Spark 写入 S3
- azure - Azure 文件共享访问签名在结束日期之前过期
- java - Android Studios:我无法访问方法 onLocationResult(LocationResult locationResult),当我尝试自己覆盖它时它给了我一个错误