in realtà avete bisogno di 2 cose su Linux: modificare argv[0]
da C
(per ps auxf
e amici) e chiamare prctl
con PR_SET_NAME
bandiera.
Non c'è assolutamente alcun modo di fare il primo pezzo da Python stesso. Sebbene, puoi semplicemente cambiare il nome del processo chiamando prctl.
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
libc.prctl(15, byref(buff), 0, 0, 0)
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
import sys
# sys.argv[0] == 'python'
# outputs 'python'
get_proc_name()
set_proc_name('testing yeah')
# outputs 'testing yeah'
get_proc_name()
ps auxf
mostrerà solo 'python' dopo che :(. Ma top
e ps -A
mostrerà nuovo 'sì testare' il nome del processo :). Anche killall
e pkill
funzioneranno con il nuovo nome.
btw, procname da googlecode cambia anche argv[0]
, quindi, anche, cambia l'output ps auxf
.
UPDATE: La soluzione pubblicata in questa risposta non funziona a volte su FreeBSD. Ora sto usando py-setproctitle dichiarato in this answer per un anno o giù di lì su varie finestre di Linux e FreeBSD. Non ci sono riusciti finora! Anche tutti dovrebbero! :). Utilizza quasi lo stesso codice di PostgreSQLuses nel suo database principale e nei processi figlio.
fonte
2009-05-28 20:39:05
vedere anche https://superuser.com/questions/427642/is-it-possibile-per-stare-ilprocesso-primo-con-pythonw, dove http: // bugs.python.org/issue5672 sono io Noto – anarcat