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 xfmostrar el árbol de procesos? Tal como están las cosas, tenemos muy poco para seguir.atsi alguno de esos es el indicado?Respuestas:
Hay varias posibilidades (algunas mencionadas en otras respuestas):
/etc/inittabentrada para el servicio con larespawndirectiva,Restartopción establecida en un valor distinto deno,respawndirectiva,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
lsse 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.
execvees 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,
psvuelva 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 -efy 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 . Elstateespecificadorpsmostrará 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.logbuscar líneas como:(dividido en varias líneas para facilitar la lectura). Usted está interesado
exe="/bin/dash"y / opid=18182qué identifica el proceso de colorete que desea buscar yppid=17176qué identifica al padre que lo ejecutó.fuente