Tengo un proceso Java ejecutándose en una instancia de RedHat Linux.
El problema es que sigue apareciendo después de que lo mato. No estoy seguro de dónde mirar. Ya fui a crontab, pero no tuve suerte.
He mirado el PPID, pero apunta a init (1).
¿Alguna idea de cómo puedo encontrar la fuente?
ps xf
mostrar el árbol de procesos? Tal como están las cosas, tenemos muy poco para seguir.at
si alguno de esos es el indicado?Respuestas:
Hay varias posibilidades (algunas mencionadas en otras respuestas):
/etc/inittab
entrada para el servicio con larespawn
directiva,Restart
opción establecida en un valor distinto deno
,respawn
directiva,monit
, oUna nueva herramienta interesante (solo para Linux) que podría proporcionar más información sobre dónde se inicia el proceso es sysdig .
Sysdig utiliza las características de traza del kernel de Linux para proporcionar lo que equivale a un sistema rápido y amplio
strace
.Por ejemplo, si quisiera ver cada proceso que se inicia
ls
, puedo emitir:Cuando
ls
se ejecute en algún lugar, recibiré un mensaje como este:Trunqué la información del entorno devuelta, pero como puede ver, en el ptid puedo ver el nombre y el pid del programa que llama a execve.
execve
es la llamada al sistema utilizada en Linux que se usa para ejecutar nuevos comandos (todas las demás llamadas ejecutivas son solo frontends para ejecutar).fuente
Creo que podrías usarlo
pstree
. Puede especificar el comando como,Lo anterior le dará una lista de todos los padres de las aplicaciones de Java.
fuente
Puede echar un vistazo a su PPID (ID de proceso principal):
Una vez que tenga el PPID (segunda columna) de su proceso Java,
ps
vuelva a usarlo para encontrar el proceso asociado:Editar : si el padre es 1 (init), entonces el primer padre de su proceso Java murió justo después de "dar a luz" (qué triste). Debido a eso, no puede usar la jerarquía de proceso actual para encontrarlo. Lo primero que le recomendaría que haga es verificar
ps -ef
. Puede encontrar al culpable solo leyendo la salida.Luego, eche un vistazo a crontabs (ya lo hizo, pero no le hará daño):
Esto requerirá privilegios de root.
¿Todavía no puede ver un proceso Java programado? Dang it. Probemos algo más. Si su proceso Java está presente desde el arranque, eche un vistazo a los programas esquematizados en el momento del arranque. Sugeriría algo como ...
Si todavía no puedes encontrar nada, entonces ... Bueno, admito que me estoy quedando sin ideas. Realmente deberías echar otro vistazo
ps -ef
y ubicar los procesos asociados con los programas basados en Java. Deberías encontrarte con un demonio, o un "lanzador", responsable de la reaparición constante de tu proceso Java.fuente
init
, son al menos huérfanos . Elstate
especificadorps
mostrará si son zombies (por ejemplo,ps -eo pid,ppid,state,comm
); El estado seráZ
.Si no sabe quién es el padre, debería hacer un seguimiento del sistema como auditado
habilitaría el registro con:
y luego en
/var/log/audit/audit.log
buscar líneas como:(dividido en varias líneas para facilitar la lectura). Usted está interesado
exe="/bin/dash"
y / opid=18182
qué identifica el proceso de colorete que desea buscar yppid=17176
qué identifica al padre que lo ejecutó.fuente