更改python脚本的进程名称

jld*_*ont 24 python linux

有没有办法在Linux上更改运行python脚本的进程的名称?

当我这样做时ps,我得到的只是"python"进程名称.

ber*_*nie 19

http://code.google.com/p/procname/

样品用法:

# Lets rename:    
>>> procname.setprocname('My super name')    

# Lets check. Press Ctrl+Z       
user@comp:~/procname$ ps

    PID TTY TIME CMD 

13016 pts/2 00:00:00 bash

13128 pts/2 00:00:00 My super name <-- it's here
Run Code Online (Sandbox Code Playgroud)

它仅适用于存在prctl系统调用且支持PR_SET_NAME命令的系统.

  • 看起来这个包不再受支持。我收到导入错误“未定义符号:Py_InitModule3” (3认同)
  • 在该票证中,他们还提到了另一个流程名称更改工具(也在C中):http://code.google.com/p/py-setproctitle/source/browse/tools/ (2认同)

Sas*_* Ru 16

有更简单的(你不需要导入任何库)但可能不是那么优雅的方式.你必须不要在shebang线内使用"env".

换句话说,这将在进程列表中命名为"python":

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

但是这将使用您的脚本名称命名:

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

所以,你就可以用类似的东西找到它pidof -x scriptnameps -C scriptname

  • 这正是我正在寻找的。谢谢 (2认同)
  • @ChristopherBarber env的“目的”是[有争议的](https://unix.stackexchange.com/questions/29608/why-is-it-better-to-use-usr-bin-env-name-instead-of -path-to-name-as-my / 29620#29620),使用它的大多数人通常都不太了解。从我的角度来看,这只是使用env _avoid_前缀的另一个原因。 (2认同)

Mat*_*our 8

可以选择执行以下操作,但它仅适用于linux(使用prctl(2)调用)

if sys.platform == 'linux2':
    import ctypes
    libc = ctypes.cdll.LoadLibrary('libc.so.6')
    libc.prctl(15, 'My Simple App', 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)


amw*_*ter 5

procname库在ubuntu上对我不起作用.我去了setproctitle而不是(pip install setproctitle).这就是gunicorn使用的,它对我有用.