import psutil
process = psutil.Process(pid=1234)
print(process.name()) # 输出进程名称
macOS 系统
方法:使用 sysctl 和 Mach API
工具
说明
命令示例
sysctl
查询内核信息
sysctl -a | grep mach_task
task_for_pid
获取任务端口
需结合 IPC 通信使用
方法:使用 psutil 库
import psutil
for proc in psutil.process_iter(['name', 'pid']):
print(f"{proc.info['pid']}: {proc.info['name']}")
跨平台解决方案对比
方案
优点
缺点
适用场景
psutil
跨平台、接口统一、使用简单
依赖第三方库
快速开发优先
系统原生 API
无依赖、性能高
代码复杂、需处理平台差异
高性能/底层开发需求
命令行工具
无需编程、系统原生支持
难以集成到程序中
手动检查/脚本调用
权限与兼容性说明
场景
注意事项
Linux 系统
普通用户只能查询自己创建的进程,需 root 权限查询其他用户进程
Windows 系统
需启用 “SeDebugPrivilege” 权限才能查询系统进程
macOS 系统
沙盒应用受限,需配置 entitlements 文件
相关问题与解答
问题 1:如何过滤特定进程名称?
解答: 使用 psutil 时可通过名称匹配过滤:
import psutil
target_name = "chrome.exe"
for proc in psutil.process_iter(['name']):
if proc.info['name'] == target_name:
print(f"Found {target_name} with PID {proc.pid}")
问题 2:如何实时监控进程变化?
解答: 可结合定时任务和集合运算实现:
import psutil
import time
prev_set = set()
while True:
current_set = {proc.pid for proc in psutil.process_iter()}
started = current_set prev_set
stopped = prev_set current_set
prev_set = current_set
if started: print("Started:", started)
if stopped: print("Stopped:", stopped)
time.sleep(1
发表回复