98 votes

Comment obtenir un processus enfant à partir d'un processus parent

Est-il possible d'obtenir l'id du processus enfant à partir de l'id du processus parent dans le shell script ?

J'ai un fichier à exécuter en utilisant le shell script, ce qui conduit à un nouveau processus processus1 (processus parent). Ce site processus1 a bifurqué vers un autre processus processus2 (processus enfant). En utilisant script, je suis capable d'obtenir le pid de processus1 en utilisant la commande :

cat /path/of/file/to/be/executed

mais je ne parviens pas à récupérer le pid du processus enfant.

9voto

krishna Points 99
ps -axf | grep parent_pid 

La commande ci-dessus imprime les processus respectifs générés par parent_pid J'espère que cela vous aidera. +++++++++++++++++++++++++++++++++++++++++++

root@root:~/chk_prgrm/lp#

 parent...18685

 child... 18686

root@root:~/chk_prgrm/lp# ps axf | grep frk

 18685 pts/45   R      0:11  |       \_ ./frk

 18686 pts/45   R      0:11  |       |   \_ ./frk

 18688 pts/45   S+     0:00  |       \_ grep frk

9voto

y_159 Points 130

Vous pouvez obtenir le pids de tous les processus enfants d'un processus parent donné <pid> en lisant le /proc/<pid>/task/<tid>/children entrée.

Ce fichier contient les pids des processus enfants de premier niveau. Faites-le récursivement pour tous les pids des enfants.

Pour plus d'informations, consultez le site https://lwn.net/Articles/475688/

2voto

Jack Ross Points 21

Vous pouvez imprimer le PID de tous les processus enfants invoqués par un processus parent :

pstree -p <PARENT_PID> | grep -oP '\(\K[^\)]+'

Ceci imprime une liste de pids pour le processus principal et ses enfants de manière récursive.

1voto

Dave Points 106

J'ai utilisé ce qui suit pour rassembler le processus parent et les processus enfants d'un processus spécifique PID :

ps -p $PID --ppid $PID --forest | tail -n +2 | awk '{print$1}'

Remarque : cela ne fonctionnera pas pour trouver les processus enfants des processus enfants.

0voto

saaj Points 412

Pour le cas où l'arbre de processus d'intérêt a plus de 2 niveaux (par exemple, Chromium génère un arbre de processus profond de 4 niveaux), pgrep n'est pas d'une grande utilité. Comme d'autres l'ont mentionné plus haut, procfs contiennent toutes les informations sur les processus et il suffit de les lire. J'ai construit un outil CLI appelé Procpath qui fait exactement cela. Il lit tout /proc/N/stat représente le contenu sous forme d'un arbre JSON et l'expose aux requêtes JSONPath.

Pour obtenir les PID séparés par des virgules de tous les processus descendants d'un processus non racine (pour la racine, il s'agit de ..stat.pid ) c'est :

$ procpath query -d, "..children[?(@.stat.pid == 24243)]..pid"
24243,24259,24284,24289,24260,24262,24333,24337,24439,24570,24592,24606,...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X