如何让Python多进程Process名称同步到ps、top等系统工具
让Python多进程自定义名称在系统工具中实时显示的方案
问题描述
通过multiprocessing.Process(..., name="procName")创建的进程,ps等系统级进程跟踪工具无法识别Python内部设置的自定义名称,只会显示与父进程一致的名称。此前尝试用ctypes调用libc的prctl修改进程名,但仅在进程变为僵死状态时才能在ps中正确显示,运行中的长进程无法同步更新名称,只能通过导出日志并交叉引用PID来关联进程名,操作繁琐。
可行解决方案
使用第三方包setproctitle即可实现运行中进程名称的实时修改,让ps等系统工具直接显示自定义的进程名称,无需手动映射PID与进程名。
原尝试的无效脚本(仅进程结束后生效)
from multiprocessing import current_process, Process, active_children import time def set_proc_name(newname): from ctypes import cdll, byref, create_string_buffer libc = cdll.LoadLibrary('libc.so.6') buff = create_string_buffer(len(newname)+1) buff.value = newname s = libc.prctl(15, byref(buff), 0, 0, 0) return s def get_proc_name(): from ctypes import cdll, byref, create_string_buffer libc = cdll.LoadLibrary('libc.so.6') buff = create_string_buffer(128) # 16 == PR_GET_NAME from <linux/prctl.h> libc.prctl(16, byref(buff), 0, 0, 0) return buff.value
补充
@AKX 推荐的setproctitle包可实现该功能,后续会研究其实现方式并更新。
内容的提问来源于stack exchange,提问作者Elysiumplain
相关产品推荐
相关产品推荐

