web-dev-qa-db-fra.com

Comment Linux raconte-t-il les threads en dehors des processus d'enfants?

Linux ne distingue pas réellement entre les processus et les threads et implémente à la fois une structure de données task_struct.

Alors, qu'est-ce que Linux fournit à certains programmes pour qu'ils racontent des thèmes d'un processus de ses processus d'enfant? Par exemple, Y a-t-il un moyen de voir les détails de tous les threads qu'un processus a sous Linux?

Merci.

22
Tim

De task_struct Perspective, les threads d'un processus ont le même chef de groupe de fil ( group_leader dans task_struct ), alors que les processus d'enfants ont un autre chef de groupe de fil (chaque processus enfant).

Ces informations sont exposées à l'espace utilisateur via le /proc système de fichiers. Vous pouvez tracer les parents et les enfants en regardant le champ ppid dans /proc/${pid}/stat ou .../status (cela donne au PID parent); Vous pouvez tracer des threads en regardant le champ tgid dans .../status (cela donne l'ID de groupe de fil, qui est également le PID du chef de groupe). Les threads d'un processus sont rendus visibles dans le /proc/${pid}/task Annuaire: chaque thread obtient son propre sous-répertoire. (Chaque processus a au moins un fil.)

En pratique, des programmes souhaitant garder une trace de leurs propres threads dépendraient des API fournies par la bibliothèque de threading qu'ils utilisent, au lieu d'utiliser des systèmes d'exploitation. informations. Typiquement sur des systèmes de type UNIX qui signifie utiliser Pthreads.

29
Stephen Kitt
  1. Ceci exécute la commande top avec quelques options supplémentaires:

    top -H -b -n 1
    
    • Les -H L'argument indique le haut d'afficher chaque fil individuel. Normalement, le haut résume toutes les threads sous leur processus parent.
    • Les -b L'argument fait la première fois en mode batch - Les informations sont recueillies, affichées, puis versées sur STDOUT par opposition à l'exécution d'un mode interactif et de rafraîchir les données affichées.
    • Avec le -b Option, l'utilisateur doit indiquer le sommet combien de fois exécuter, cela se fait avec le -n argument et un argument final avec combien de fois exécuter.

    Donc top -H -b -n 1 Indique le système de "exécuter haut, afficher des threads individuels, exécuter en mode batch et exécuter uniquement une fois".

  2. La commande ps rapporte un instantané de processus en cours d'exécution.

    ps -eLf
    

    Les -eLf argument (peut être utilisé comme -e -L -f aussi bien) se casse comme suit:

    • e raconte ps _ _ Pour afficher tous les processus, quel que soit leur propriété ou leur statut actuel - actif, dormir, en attente d'E/S, etc.
    • L indique ps pour montrer des threads individuels
    • le f indique ps _ pour formater la sortie en tant que liste de format complet et conjointement avec l'argument L Argument NLWP (Nombre de threads) et LWP (ID de fil) Les colonnes sont ajoutées à la sortie.
5
ivanivan

Considérons un processus avec PID P1

Les task_struct L'objet d'un processus enfant aura PPID (PID parent) en tant que P1, et c'est PID et TGID, disons, P2.

Les task_struct L'objet d'un thread de P1 aura PID défini comme, disons P3, mais TGID est défini sur P1.

1
NOLFXceptMe