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

4

Eu tenho um complexo software Linux embarcado rodando em um derivativo gentoo, no qual um certo código é executado regularmente a cada ~ 84 minutos. Varredura através do código principal para encontrar lugares onde este código pode ser executado foi mal sucedida, e crontab também parece nenhuma 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 em primeiro lugar? Existem algumas informações no diretório /proc que posso usar? Ou é impossível descobrir o processo que executou o código dado?

    
por Alex 28.03.2014 / 07:23

2 respostas

3

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

Outra maneira de abordar isso é colocar um 'wrapper' no programa.

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

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

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

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

    
por 28.03.2014 / 14:11
3

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

$ ps -o ppid -p 5743
 PPID
  219

Como você também mencionou que tem /proc :

$ awk '{ print $4 }' /proc/5743/stat
219
    
por 28.03.2014 / 07:28

Tags