¿Dando a un proceso un nombre específico en GNU / Linux?

10

¿Cómo inicio un proceso para que tenga un identificador específico al psmando?

UPD : Tengo un par de servidores ejecutándose en una caja. La mayoría de ellos están en modo de implementación. Sin embargo, uno está en desarrollo. Todos los servidores son Pythonic y la enfermedad es que todos los servidores están listados como pythonen ps, lo que hace imposible que killalluno en desarrollo deje otros intactos.

UPD : Como David y GNUix sugirieron, creé enlaces simbólicos al intérprete de Python y los scripts de bash para cada servidor.

Alex
fuente

Respuestas:

7

Crear un enlace simbólico debería ser suficiente, sin embargo, sería más útil si supiéramos la enfermedad y no el síntoma. ¿Qué estás tratando de hacer exactamente? Porque puede haber una mejor manera

gnuix@defiant)-(08:11pm-:-06/10)--
(~)./0012
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14020 pts/1    00:00:00 0012
14021 pts/1    00:00:00 ps
(gnuix@defiant)-(08:11pm-:-06/10)--
(~)ln -s 0012 weird
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)./weird 
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14046 pts/1    00:00:00 weird
14047 pts/1    00:00:00 ps
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)

Actualización: en función de la información adicional que pueda (estoy seguro de que hay una manera más fácil, pero no me viene en este momento) hacer que sus servidores escriban su PID en un archivo al inicio, luego podría matar -9 | cat /var/run/devserver.pid pero esa sería una pregunta de programación :)

Actualice nuevamente: También podría hacer algunos trucos de shell para obtener el PID de los servidores cuando los inicie, desde la parte superior de mi cabeza podría crear una función de shell llamada startmyserver, por ejemplo, que envolvería el comando que usa para iniciar sus servidores, pero también capturar $! a un archivo basado en el nombre de inicio, entonces estamos hablando de scripts de shell que son 'inbounds' @ ServerFault. :-)

GNUix
fuente
4

Puede cambiar el nombre del binario que va a ejecutar. Puede escapar usando un enlace simbólico al binario.

Si realmente desea cambiar el nombre, la mejor manera es usar un contenedor simple que establezca argv y luego ejecute el proceso que desea ejecutar. No tengo tiempo para darte un código de ejemplo ahora, pero grita fuerte en aproximadamente 10 horas y veré qué puedo hacer.

David Pashley
fuente
exactamente mi punto. Necesita código para eso (aparte de renombrar / (sym) que vincula el binario, lo que podría ser problemático si verifica argv [0])
Martin M.
Algunos archivos binarios no funcionarán bien si lo hace principalmente incrustado (busybox, dropbear)
nhed
3

Mire https://github.com/electrum/procname . Le permite establecer el nombre del proceso de cualquier proceso utilizando una variable de entorno.

Uso:

Ejecute Java con el conjunto de variables de entorno LD_PRELOAD y PROCNAME:

LD_PRELOAD = / ruta / a / libprocname.so PROCNAME = hola java -jar foo.jar

itsadok
fuente
2

Esto realmente no pertenece a SO porque es genérico, no una pregunta específica del idioma.

La respuesta corta no es fácil. Es decir, no se puede hacer desde la funcionalidad de su shell o procfs / sysfs. Necesitará usar una utilidad externa para lograrlo.

Hay una larga descripción de cómo y por qué aquí . Cuidado, es bastante centrado en C.

Actualizar:

Son python que cambia el juego. Sin ahora ser demasiado SO, probablemente sería más fácil modificarlos para hacer uso de este módulo o un enfoque similar.

Dan Carley
fuente
touche .. Sabía que había una manera más fácil :)
GNUix
El código C es considerablemente más detallado de lo que debe ser debido a la cantidad de salida que genera. Debería ser posible reducirlo, pero está haciendo lo mismo que sugería. Solo con algún código que lo acompañe :) El bit que falta es el ejecutivo para ejecutar su código :)
David Pashley