如果你只需要支持 Linux 并且只需要更改进程名称,那么你可以简单地将其写入/proc/self/comm
.
例子:
import os
import subprocess
print(subprocess.run(['pidof', 'foo'], stdout=subprocess.PIPE,
universal_newlines=True))
print(subprocess.check_output(['ps', 'p', str(os.getpid()), '-o', 'pid,comm,cmd'],
universal_newlines=True))
with open(f'/proc/self/comm', 'w') as f:
f.write('foo')
print(subprocess.check_output(['pidof', 'foo'], universal_newlines=True))
print(subprocess.check_output(['ps', 'p', str(os.getpid()), '-o', 'pid,comm,cmd'],
universal_newlines=True))
输出:
$ python3 test.py argone argtwo
CompletedProcess(args=['pidof', 'foo'], returncode=1, stdout='')
PID COMMAND CMD
2881003 python3 test.py python3 test.py argone argtwo
2881003
PID COMMAND CMD
2881003 foo python3 test.py argone argtwo
注意:在 Linux 上,在 C 程序中,写入 toargv[0]
只是更改参数in/proc/self/cmdline
而不是/proc/self/comm
. 因此,它不会影响COMMAND 列、pidof
COMMAND列、plain等。top
ps
pgrep
setproctitle包支持多个平台,并且 - 在 Linux 上 - 更改命令和参数向量。但是,它是 C 扩展。