我使用的是Python的多处理库。在主进程内部,我创建了另一个进程。当我在终端上执行ps aux时,我得到两个同名的条目
ps aux | grep multithreadTest
abhishek 9017 57.6 0.1 121888 11412 pts/8 Rl+ 21:09 0:04 python multithreadTest.py
abhishek 9018 16.2 0.0 48156 7096 pts/8 R+ 21:09 0:01 python multithreadTest.py这两个进程都需要相互通信,并且正在执行两个不同的任务。哪个pid做什么有点令人困惑,因为它们显示完全相同的名称。这不利于故障排除。我的代码将部署在生产服务器上,并由SRE人员管理。对于他们来说,为什么同一任务有两个实例,这可能会让他们感到困惑。
有没有一种方法可以提供一个更具描述性的名称,以便在ps aux上为我正在创建的进程显示?我知道这在C++中是可能的。
一种方法是编写两个具有不同名称的python脚本,并使用一个管理器bash脚本来调用这两个脚本。但通过这种方式,两者将变得不相关,并且它们之间的管理和通信将变得困难。
任何帮助都将不胜感激。
发布于 2020-02-02 00:38:54
它们具有相同的hame,因为所有进程都是从相同的主进程派生的。
您需要使用专用的系统工具来重命名进程名称。例如setproctitle模块:pip install setproctitle
然后在进程函数中调用setproctitle.setproctitle("new child process name")。
下面是一个小示例:
from multiprocessing import Process
import setproctitle
import time
def a_worker():
setproctitle.setproctitle("procA")
time.sleep(10)
def b_worker():
setproctitle.setproctitle("procB")
time.sleep(10)
if __name__ == "__main__":
print("Master process title:", setproctitle.getproctitle())
a_proc = Process(target=a_worker)
b_proc = Process(target=b_worker)
# Spawn processes
a_proc.start()
b_proc.start()
# Wait for processes to terminate
a_proc.join()
b_proc.join()
print("Master process title after kids:", setproctitle.getproctitle())ps -fu的输出
363 5.2 0.1 29736 10524 tty1 S 01:25 0:00 \_ python3 ab.py
370 0.0 0.0 29736 4424 tty1 S 01:25 0:00 \_ procA
371 0.2 0.0 29736 4216 tty1 S 01:25 0:00 \_ procBhttps://stackoverflow.com/questions/60018603
复制相似问题