en realidad, necesitas 2 cosas en Linux: modificar argv[0]
desde C
(para ps auxf
y amigos) y llamar prctl
con PR_SET_NAME
bandera.
No hay absolutamente ninguna forma de hacer la primera pieza desde Python. Aunque, puede cambiar el nombre del proceso llamando a 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)
libc.prctl(16, byref(buff), 0, 0, 0)
return buff.value
import sys
get_proc_name()
set_proc_name('testing yeah')
get_proc_name()
ps auxf
mostrará solo 'python' después de eso :(. Pero top
y ps -A
mostrará un nuevo nombre de proceso 'testing sí' :). También killall
y pkill
funcionará con nuevo nombre.
por cierto, procname de googlecode también cambia argv[0]
, por lo tanto, incluso, cambia la ps auxf
salida.
ACTUALIZACIÓN : La solución publicada en esta respuesta no funciona bien a veces en FreeBSD. Ahora estoy usando py-setproctitle indicado en esta respuesta durante un año más o menos en varias cajas de linux y freebsd. ¡No falla hasta ahora! ¡Todos deberían también! :). Utiliza casi el mismo código que utiliza PostgreSQL en su base de datos principal y procesos secundarios.