est-il possible de savoir qui sont les enfants du processus spécifique? par exemple les enfants dont l'ID parent est foo?
est-il possible de savoir qui sont les enfants du processus spécifique? par exemple les enfants dont l'ID parent est foo?
Réponses:
Vous recherchez la pstree
commande.
pstree
par lui-même listera tous les processus sous forme d'arborescence (comme le lsblk
fait). Vous pouvez également utiliser l' -p
indicateur pour obtenir la liste des PID et -s
pour 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 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 PID parent), et imprime le deuxième champ correspondant (le PID enfant).
Si vous voulez simplement voir les enfants immédiats d'un processus dont le PID est, 123
vous pouvez utiliser l' option de la ps
commande --ppid
:
ps --ppid 123
Vous pouvez combiner cela avec la pidof
commande pour obtenir les enfants d'un processus par leur nom, c'est-à-dire avec un processus appeléfoo
ps --ppid $(pidof foo)
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é!
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.
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2
doit être compatible POSIX.