web-dev-qa-db-fra.com

Trouver des enfants du processus

y at-il un moyen de savoir, qui sont les enfants du processus spécifique? par exemple, ces enfants dont l'identifiant de parent est foo?

14

Vous recherchez la commande pstree . pstree à lui seul listera tous les processus sous forme d'arborescence (comme le fait lsblk). Vous pouvez également utiliser l'indicateur -p pour obtenir les PID répertoriés et le -s pour afficher également le processus parent:

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

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

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

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

25
muru

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

ps --ppid 123

Vous pouvez combiner cela avec la commande pidof pour obtenir les enfants d’un processus par son nom, c’est-à-dire s’il reçoit un processus appelé foo.

ps --ppid $(pidof foo)
10
steeldriver

Une autre option est d'utiliser Moniteur système (est pré-installé). Dans la barre de menus SM, cochez l'option "Dépendances", sous "Afficher", pour obtenir un retour visuel, montrant le ou les processus parents et enfants comme indiqué 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 sagement leur temps pour apprendre les commandes de base, par rapport aux applications GUI ou au moins capables de maîtriser les certain degré!

enter image description hereenter image description here

10
v2r

Je ne suis pas un expert, mais en lisant les réponses ci-dessus, il m'a semblé qu'il y avait 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 en a: pour un processus avec le code ID $ mypid, ses processus enfants sont listé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 de processus parent via l'entrée "PPid" du 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 si cela est portable au-delà des systèmes Linux, cependant.

6
andybuckley