You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用multiprocessing设置进程名后psutil显示异常的问题求助

问题描述

我尝试创建带有明确名称的Python进程,以便通过名称在psutil的迭代对象中找到它。目前创建的进程PID正确,但psutil显示的进程名为“python”,而非我设置的名称。我的目标是创建一批可确定的进程并监控其运行状态,除了名称外无法区分它们(我会用一个专门的进程来监控其他进程)。我最初以为是Windows系统问题,遂将项目迁移至Ubuntu,但问题依旧。我知道可以通过process.cmdline()找到所需名称,但好奇之前的方法存在什么问题。

示例代码:

process = multiprocessing.Process(
    name=service_config["service_type"],
    target=service.start_service
)
process.start()
print(process.pid)
print(process.name)

打印结果:

9387
silly_service_name
问题原因

multiprocessing.Process的name参数只是Python内部进程管理用的标识,它不会修改操作系统层面的进程名称。

psutil读取的是操作系统内核维护的进程信息,其中的进程名称对应的是启动进程的可执行文件(比如python、python3),和Python内部给进程对象设置的name属性完全是两回事。这个属性只在当前Python进程的multiprocessing模块范围内有效——比如用multiprocessing.active_children()获取子进程列表时,能看到这个自定义名称,但系统级别的工具(包括ps、top和psutil)都无法识别它。

补充说明

你提到的process.cmdline()能找到所需信息,是因为子进程的命令行参数里会包含multiprocessing启动时的相关标识,若你在启动子进程时传递了自定义参数,也能在这里找到。这是因为cmdline是操作系统记录的进程启动命令,属于系统层面的信息,所以psutil能读取到。

内容的提问来源于stack exchange,提问作者Jonathan Pépin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:50:45