Comment puis-je afficher l'arborescence de processus d'un shell de terminal, y compris les enfants?

30

Lorsqu'un script est lancé à partir de l'invite de commandes, le shell génère un sous-processus pour ce script. Je veux montrer cette relation entre le processus de niveau terminal et ses enfants à l'aide psd'une sortie de style d'arbre.
Comment puis-je faire ceci?

Ce que j'ai essayé jusqu'à présent

fichier: script.sh

#!/bin/bash

ps -f -p$1

Ensuite, j'invoque le script à partir de la ligne de commande en passant l'ID de processus du shell du terminal:

$ ./script.sh $$

Ce que je veux c'est quelque chose comme ça

  • processus shell de niveau supérieur (terminal)
  • ./script.sh
  • processus de pscommande lui-même
USER    PID  [..]
ubuntu 123     -bash
ubuntu 1234    \_ bash ./script.sh
ubuntu 12345      \_ ps auxf 

ce que je reçois est:

  PID TTY      STAT   TIME COMMAND
14492 pts/24   Ss     0:00 -bash
the_velour_fog
la source
2
Pourquoi ne pas utiliser pstree?
muru
@muru J'ai essayé pstreeet je n'ai pas réussi à produire une sortie significative, je pense que je n'ai pas pstree $$produit bash--pstreeexactement ce que je cherchais.
the_velour_fog
Comment est-ce que ce n'est pas ce que vous cherchez? Vous avez remplacé le script et ps, qu'attendez-vous d'autre à part pstree?
muru
@muru votre droit c'est techniquement ce que je voulais, mais trop minime. c'est-à-dire comment savez-vous avec certitude quels processus vous regardez sans PID comme ps le montre la table de sortie?
the_velour_fog
4
pstree -p $$? Ou, si vous voulez plus de la ligne de commande show, pstree -pa $$. Ou, si vous voulez montrer tous les processus parents qui montent, pstree -psa $$.
muru

Réponses:

30

Essayer

# ps -aef --forest
root     114032   1170  0 Apr05 ?        00:00:00  \_ sshd: root@pts/4
root     114039 114032  0 Apr05 pts/4    00:00:00  |   \_ -bash
root      56225 114039  0 13:47 pts/4    00:00:16  |       \_ top
root     114034   1170  0 Apr05 ?        00:00:00  \_ sshd: root@notty
root     114036 114034  0 Apr05 ?        00:00:00  |   \_ /usr/libexec/openssh/sftp-server
root     103102   1170  0 Apr06 ?        00:00:03  \_ sshd: root@pts/0
root     103155 103102  0 Apr06 pts/0    00:00:00  |   \_ -bash
root     106798 103155  0 Apr06 pts/0    00:00:00  |       \_ su - postgres
postgres 106799 106798  0 Apr06 pts/0    00:00:00  |           \_ -bash
postgres  60959 106799  0 14:39 pts/0    00:00:00  |               \_ ps -aef --forest
postgres  60960 106799  0 14:39 pts/0    00:00:00  |               \_ more
GILBERTO LINS
la source
5
La question impliquait de rechercher un arbre de processus commençant par un processus spécifique, de prendre l' $1argument d'un script ou d'utiliser $$pour regarder l'arbre commençant par le shell actuel ... Pouvez-vous mettre à jour votre réponse pour inclure des informations sur la façon de démarrer une forêt à partir de un processus spécifique?
filbranden
23

Je l'ai trouvé après avoir lu cette réponse de superutilisateur , en notant ce commentaire

Mais pas pour un PID (-p) car il imprime uniquement le processus spécifique, mais pour la session (-g)

et expérimenter

ps f -g<PID>

résultat

$ ./script.sh $$
  PID TTY      STAT   TIME COMMAND
14492 pts/24   Ss     0:00 -bash
 9906 pts/24   S+     0:00  \_ bash ./script.sh 14492
 9907 pts/24   R+     0:00      \_ ps f -g14492
the_velour_fog
la source
3
de la page de manuel:OUTPUT MODIFIERS: f ASCII-art process hierarchy (forest)
phyatt
1

Vous pouvez utiliser la commande ps f -g <PID>et statuer le processus racine pour PID:

#> ps f -g 0

PID TTY      STAT   TIME COMMAND
2 ?        S      0:00 [kthreadd]
3 ?        S      0:01  \_ [ksoftirqd/0]
7 ?        S      0:19  \_ [rcu_sched]
Richard J.
la source
1

Essaye ça:

 $ ps -afx
  PID TTY      STAT   TIME COMMAND
    2 ?        S      0:00 [kthreadd]
    4 ?        I<     0:00  \_ [kworker/0:0H]
    6 ?        I<     0:00  \_ [mm_percpu_wq]
    7 ?        S      0:14  \_ [ksoftirqd/0]
    8 ?        I      0:34  \_ [rcu_sched]
    9 ?        I      0:00  \_ [rcu_bh]
   10 ?        S      0:00  \_ [migration/0]
   11 ?        S      0:00  \_ [watchdog/0]
sluge
la source