realidad se necesitan 2 cosas en Linux: modificar argv[0]
de C
(por ps auxf
y amigos) y llamar prctl
con PR_SET_NAME
bandera.
No hay absolutamente ninguna manera de hacer la primera pieza de la propia pitón. Aunque, puede simplemente 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)
# 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
mostrará sólo 'pitón' después de eso :(. Pero top
y ps -A
mostrará nueva 'sí pruebas' nombre del proceso :). También killall
y pkill
funcionarán con un nuevo nombre.
por cierto, procname de googlecode también cambia argv[0]
, así, incluso, cambia ps auxf
salida.
ACTUALIZACIÓN: La solución publicada en esta respuesta no funciona bien a veces en FreeBSD. Ahora estoy usando py-setproctitle declaró in this answer durante un año más o menos en varias cajas linux y freebsd. ¡No falla hasta ahora! ¡Todos deberían también! :). Utiliza casi el mismo código que PostgreSQLuses en su base de datos principal y procesos secundarios.
ver también https://superuser.com/questions/427642/is-it-possible-to-set-the-process-name-with-pythonw, donde http: // bugs.python.org/issue5672 soy yo ntionned – anarcat