
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 crontab
també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 /proc
diretó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/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 então
chmod 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