Que script de /etc/init.d/ iniciou o processo?

4

Digamos que temos um PID de um processo e sabemos que ele foi iniciado pelo init durante a inicialização. Como encontramos o nome do script que o iniciou?

Uma maneira é executar grep $PROCESS_NAME /etc/init.d/* , mas essa solução não é nem à prova de balas nem muito elegante.

Outra seria executar service --status-all e há uma boa chance de o PID ser retornado por um dos serviços, mas isso é ainda menos elegante que a solução anterior

EDITAR:

O sistema operacional é RedHat / Ubuntu.

Vamos supor que temos o sshd rodando com o PID 2083 assim:

UID        PID  PPID  C STIME TTY          TIME CMD
root      2083     1  0  2012 ?        00:00:00 /usr/sbin/sshd -D

O pai dele é init e eu acho que foi iniciado com o comando service sshd start durante a inicialização, mas se tivermos algo que não possa ser facilmente adivinhado, por exemplo, uma inicialização complicada comando ou por causa de um script /etc/init.d/somedeamon ofuscado - como encontramos o script somedeamon , conhecendo apenas o PID?

    
por user28403 06.02.2013 / 16:02

2 respostas

3

Uma maneira fácil de acompanhar a cadeia de PPID ao contrário é com a ferramenta pstree :

pstree -p PID

Isso mostrará todos os processos pai do PID especificado, por exemplo:

$ pstree 42284
-+= 00001 root /sbin/launchd
 \-+= 00199 jack /sbin/launchd
   \-+= 00254 jack /Applications/iTerm.app/Contents/MacOS/iTerm -psn_0_90134
     \-+= 00309 root login -fp jack
       \-+= 00310 jack -bash
         \--= 42284 jack vim site.txt
    
por 06.02.2013 / 18:33
0

Você deve ser capaz de seguir a cadeia PPID ao contrário do processo em que está interessado. Mas se, digamos, A lançou B, B lançou C e B terminou, agora o pai de C é init (PID 1). Para acessar informações sobre o processo PID, você faz ps -l -pPID .

    
por 06.02.2013 / 18:06