Eu acredito que você pode querer uma combinação de algo como pstree -p
e ps axjf
com alguma análise adicional.
Observe como o PID de httpd
é 30469
, e todo processo que é filho de httpd
tem PPID
(ID de processo pai) de 30469
. Os netos de httpd
terão o PPID
de seu processo pai, que terá o PPID
do processo httpd
.
Eu não postei a saída completa de nenhum deles, pois são bastante grandes. Aqui está um exemplo de saída de cada um:
user@host$ ps -axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1 30469 30469 30469 ? -1 Ss 0 0:46 /usr/sbin/httpd
30469 22410 22410 22410 ? -1 Ssl 0 0:00 \_ PassengerWatchdog
22410 22413 22413 22410 ? -1 Sl 0 23:06 | \_ PassengerHelperAgent
22410 22418 22418 22410 ? -1 Sl 99 0:01 | \_ PassengerLoggingAgent
30469 22442 30469 30469 ? -1 Sl 48 7:55 \_ (wsgi:pulp)
30469 22443 30469 30469 ? -1 S 48 1:48 \_ /usr/sbin/httpd
30469 22445 30469 30469 ? -1 S 48 1:55 \_ /usr/sbin/httpd
30469 22447 30469 30469 ? -1 S 48 1:54 \_ /usr/sbin/httpd
user@host$ pstree -p
├─httpd(30469)─┬─PassengerWatchd(22410)─┬─PassengerHelper(22413)─┬─{PassengerHelpe}(22415)
│ │ │ ├─{PassengerHelpe}(22416)
│ │ │ ├─{PassengerHelpe}(22417)
│ │ │ ├─{PassengerHelpe}(22420)
│ │ │ ├─{PassengerHelpe}(22422)
│ │ │ ├─{PassengerHelpe}(22423)
│ │ │ ├─{PassengerHelpe}(29342)
Se você conhece a árvore de processos pai, pode executar pstree -p <pid>
.