¿Cómo saber el motivo por el que se ejecutó un comando/código en Linux?

¿Cómo saber el motivo por el que se ejecutó un comando/código en Linux?

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 crontabtampoco 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 /procdirectorio 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/someproga /usr/bin/someprog.orig.
  • Cree /usr/bin/someprogcomo 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 luegochmod 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

información relacionada