调用系统API如psutil.Process或Windows API GetModuleFileName可获取当前
API 获取进程名称的详细实现
不同操作系统的进程名称获取方式
Windows 系统
方法:使用 psutil 库(推荐)
| 步骤 | 说明 | 代码示例 |
|---|---|---|
| 安装依赖 | 需安装第三方库 psutil | pip install psutil |
| 查询进程 | 通过 PID 或进程名获取信息 | python<br>import psutil<br>process = psutil.Process(pid=1234)<br>print(process.name()) |
| 遍历所有进程 | 获取系统中所有进程名称 | python<br>for proc in psutil.process_iter(['name']):<br> print(proc.info['name']) |
方法:直接调用系统 API
| 函数 | 说明 | 示例代码 |
|---|---|---|
EnumProcesses | 枚举所有进程 ID | 需配合 OpenProcess 使用 |
GetModuleBaseName | 获取进程名称 | c++<br>TCHAR name[MAX_PATH];<br>HANDLE hProcess = OpenProcess(...);<br>GetModuleBaseName(hProcess, NULL, name, SIZEOF(name)); |
Linux 系统
方法:读取 /proc 文件系统
| 路径 | 说明 | 示例 |
|---|---|---|
/proc/[PID]/comm | 存储进程名称 | cat /proc/1234/comm |
/proc/[PID]/cmdline | 完整命令行参数 | cat /proc/1234/cmdline |
方法:使用 psutil 库
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 以上就是关于“api 获取进程名称”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复