
Tengo un software Linux integrado complejo que se ejecuta en un derivado de gentoo, en el que se ejecuta una determinada pieza de código regularmente cada ~84 minutos. Revisar el código principal para encontrar lugares donde este código podría ejecutarse no tuvo éxito y crontab
tampoco parece haber una explicación posible.
Mi pregunta: ¿Es posible, modificando el código en cuestión, descubrir qué otro proceso/código/archivo/servicio lo inició en primer lugar? ¿Hay alguna información en el /proc
directorio que pueda utilizar? ¿O es imposible descubrir el proceso que ejecutó el código dado?
Respuesta1
La respuesta de Chris funcionaría si el proceso es de larga duración y usted tiene tiempo para inspeccionarlo, pero si se trata de un comando de ejecución breve, puede ser difícil detectarlo mientras el proceso aún esté activo.
Otra forma de abordar esto es colocar un "envoltorio" alrededor del programa.
Digamos que el programa que se llama es /usr/bin/someprog
.
- Mover
/usr/bin/someprog
a/usr/bin/someprog.orig
. - Cree
/usr/bin/someprog
como un script como por ejemplo:
#!/bin/sh
echo "My pid: $$" >> /tmp/someprog.log
ps -ef --forest >> /tmp/someprog.log
exec /usr/bin/someprog.orig
- Y luego
chmod a+x /usr/bin/someprog
Esto volcará un árbol de procesos y lo colocará /tmp/someprog.log
. Luego podrías mirar el árbol y encontrar qué lo está generando.
Respuesta2
Parece que estás buscando el PID principal (PPID):
$ ps -o ppid -p 5743
PPID
219
Como también mencionaste que tienes /proc
:
$ awk '{ print $4 }' /proc/5743/stat
219