1 votes

Liste des identifiants de processus enfants

Je veux obtenir une liste de tous les identifiants de processus enfants pour un identifiant de processus parent donné (6330 qemu) à utiliser dans un script bash.

Je peux les voir dans htop, par exemple :

htop output

Les meilleurs résultats de recherche incluent :

# pgrep -P 6330
(aucune sortie)

# ps --ppid 6330
  PID TTY          TIME CMD

# pstree -p 6330
qemu(6330)-+-{qemu}(6332)
           |-{qemu}(6333)
           |-{qemu}(6340)
           |-{qemu}(6342)
           |-{qemu}(6343)
           `-{qemu}(6344)

... la sortie de ceux-ci est la même si elle est exécutée en tant que root ou en tant que l'utilisateur qui possède qemu.

La sortie de pstree est utilisable en dernier recours, mais je préférerais ne pas le traiter si je peux m'en passer.

Aussi... ps aux | grep 6332 et pgrep 6332 ne donnent rien... donc c'est un peu déconcertant aussi.

Cela devrait être facile non ?

Je vous remercie pour votre temps.

2voto

Kamil Maciorowski Points 57004

Je veux obtenir une liste de tous les IDs de processus enfants pour un ID de processus parent donné (6330 qemu) à utiliser dans un script bash.

La solution à ce problème exact est pgrep -P 6330, mais le reste de la question suggère peut-être que les "IDs de processus enfants" ne sont pas ce que vous voulez vraiment.

Vous avez utilisé pgrep -P 6330 et la sortie était vide car il n'y avait aucun processus enfant. Ce que htop et pstree vous ont montré étaient des threads. Peut-être que vous voulez vraiment les IDs de threads.

Voir ceci:

  • Pourquoi y a-t-il de nombreux processus répertoriés sous le même titre dans htop?

    htop montre par défaut des threads individuels en tant que processus séparés, de manière similaire à ce que ps -AL ferait. Si vous appuyez sur la touche majuscule H, il basculera pour montrer uniquement les processus principaux (en appuyant à nouveau, il reviendra).

  • man 1 pstree:

    Les threads enfants d'un processus se trouvent sous le processus parent et sont affichés avec le nom du processus entre accolades [...]

  • Les threads sont-ils implémentés en tant que processus sous Linux?

    Linux assignait autrefois différents IDs de processus aux threads. Depuis Linux 2.4, les threads d'un processus partagent son PID ; ceci est pour satisfaire POSIX. La terminologie est devenue plus compliquée, le "PID" est quelque peu ambigu. D'après une réponse pertinente sur SO:

    La première et la plus importante chose à réaliser est que "PID" signifie des choses différentes dans l'espace noyau et l'espace utilisateur. Ce que le noyau appelle des PIDs sont en fait des IDs de threads de niveau noyau (appelés souvent TIDs), […]. Chaque thread sur le système, que ce soit dans le même processus ou un différent, a un TID unique (ou "PID" dans la terminologie du noyau).

    Ce qui est considéré comme un PID dans le sens POSIX de "processus", en revanche, est appelé un "ID de groupe de threads" ou "TGID" dans le noyau. Chaque processus se compose d'un ou de plusieurs threads (processus noyaux) ayant chacun leur propre TID (PID noyau), mais partageant tous le même TGID, qui est égal au TID (PID noyau) du thread initial dans lequel main s'exécute.

    Lorsque top vous montre des threads, il affiche des TIDs (PIDs de noyau), pas des PIDs (TGIDs de noyau), et c'est pourquoi chaque thread en a un séparé.

    La dernière phrase s'applique également à htop ou pstree.

Si vous voulez toujours obtenir ces différents IDs (6332, 6333, …) à utiliser dans un script shell, appelez ceci:

ps -o lwp= -Lp 6330

La commande n'est pas portable, elle peut fonctionner ou non dans votre OS. Si elle fonctionne, vous voudrez peut-être exclure le thread principal:

ps -o lwp= -Lp 6330 | grep -v '^ *6330$'

(* parce que ps (au moins le mien) ajoute des espaces en tête).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X