Como descobrir o motivo pelo qual um comando/código foi executado no Linux?

Como descobrir o motivo pelo qual um comando/código foi executado no Linux?

Eu tenho um software Linux embarcado complexo rodando em um derivado do gentoo, no qual um determinado trecho de código é executado regularmente a cada 84 minutos. Varrer o código principal para encontrar locais onde esse código poderia ser executado não teve êxito e crontabtambém parece não ter explicação possível.

Minha pergunta: É possível, modificando o código em questão, descobrir qual outro processo/código/arquivo/serviço o iniciou? Há alguma informação no /procdiretório que eu possa usar? Ou é impossível descobrir o processo que executou o código fornecido?

Responder1

A resposta de Chris funcionaria se o processo durasse muito e você tivesse tempo para inspecioná-lo, mas se for um comando de execução curta, pode ser difícil capturá-lo enquanto o processo ainda estiver ativo.

Outra maneira de abordar isso é colocar um 'invólucro' em torno do programa.

Digamos que o programa que está sendo chamado seja /usr/bin/someprog.

  • Mover /usr/bin/someprogpara /usr/bin/someprog.orig.
  • Crie /usr/bin/someprogcomo um script como:

 

#!/bin/sh
echo "My pid: $$" >> /tmp/someprog.log
ps -ef --forest >> /tmp/someprog.log
exec /usr/bin/someprog.orig
  • E entãochmod a+x /usr/bin/someprog

Isso irá despejar uma árvore de processos e colocá-la no arquivo /tmp/someprog.log. Você poderia então olhar para a árvore e descobrir o que a está gerando.

Responder2

Parece que você está procurando o PID pai (PPID):

$ ps -o ppid -p 5743
 PPID
  219

Já que você também mencionou que tem /proc:

$ awk '{ print $4 }' /proc/5743/stat
219

informação relacionada