Trouver des enfants du processus

15

est-il possible de savoir qui sont les enfants du processus spécifique? par exemple les enfants dont l'ID parent est foo?

Mohammad Reza Rezwani
la source

Réponses:

26

Vous recherchez la pstreecommande. pstreepar lui-même listera tous les processus sous forme d'arborescence (comme le lsblkfait). Vous pouvez également utiliser l' -pindicateur pour obtenir la liste des PID et -spour afficher également le processus parent:

$ pstree -p 602
udisksd(602)-+-{cleanup}(607)
             |-{gdbus}(605)
             |-{gmain}(603)
             `-{probing-thread}(606)

Un moyen (probablement) conforme à POSIX d'obtenir les PID enfants (que j'avais mentionné dans les commentaires ailleurs):

ps -o ppid= -o pid= -A | awk '$1 == <some pid>{print $2}'

Cela indique psd'écrire le PID parent et le PID de tous les processus (sans en-têtes), puis utilise awkpour voir quelles lignes ont le PID donné dans le premier champ (le PID parent), et imprime le deuxième champ correspondant (le PID enfant).

muru
la source
10

Si vous voulez simplement voir les enfants immédiats d'un processus dont le PID est, 123vous pouvez utiliser l' option de la pscommande --ppid:

ps --ppid 123

Vous pouvez combiner cela avec la pidofcommande pour obtenir les enfants d'un processus par leur nom, c'est-à-dire avec un processus appeléfoo

ps --ppid $(pidof foo)
tournevis
la source
10

Une autre option consiste à utiliser System Monitor (livré préinstallé). Dans la barre de menu SM, marquez l'option "Dépendances", sous "Affichage", pour avoir un retour visuel, montrant le (s) processus parent (s) et enfants comme montré dans la capture d'écran ci-dessous.

Je préfère moi-même la CL (ligne de commande) et suggère que ceux qui utilisent Linux, dans ce cas Ubuntu au quotidien, investissent judicieusement leur temps dans l'apprentissage des commandes de base, par rapport aux applications GUI ou au moins sont capables de maîtriser les deux à la fois. certain degré!

entrez la description de l'image ici entrez la description de l'image ici

v2r
la source
1
OT: Quel thème est-ce?
muru
1
J'utilise Ubuntu + GnomeShell 3.2.1 Le thème est appelé "AdwaitaDark" qui est un thème GTK3, mais il est personnalisé et non disponible, comme vous le voyez dans les captures d'écran.
v2r
6

Je ne suis pas un expert, mais en lisant les réponses ci-dessus, il me semble qu'il existe probablement un moyen plus direct de le faire via le système de fichiers proc, par exemple pour une utilisation programmatique dans un script plutôt que pour un affichage lisible par l'homme. Et en effet, il y a: pour un processus avec le code ID $ mypid, ses processus enfants sont répertoriés dans

/proc/$mypid/task/$mypid/children

par exemple

$ cat /proc/3123/task/3123/children 
3131 3133

De même, vous pouvez obtenir l'ID du processus parent via l'entrée "PPid" dans le fichier

/proc/$mypid/task/$mypid/status

par exemple

$ grep PPid /proc/3131/task/3131/status
PPid:   3123
$ grep PPid /proc/3131/task/3131/status | cut -f2
3123

Je ne sais pas cependant à quel point cela est portable au-delà des systèmes Linux.

andybuckley
la source
1
Si la portabilité est un problème: ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2doit être compatible POSIX.
muru