GNU/Linux >> Tutoriels Linux >  >> Linux

Les threads du noyau Linux sont-ils vraiment des processus du noyau ?

La documentation peut être assez déroutante, alors voici le "vrai " Modèle Linux :

  • à l'intérieur du noyau Linux, quelque chose qui peut être exécuté (et planifié) s'appelle un "processus",
  • chaque processus possède un ID de processus (PID) unique au système et un ID de groupe de threads (TGID),
  • un processus "normal" a PID=TGID et aucun autre processus ne partage cette valeur TGID,
  • un processus "threadé" est un processus dont la valeur TGID est partagée par d'autres processus,
  • plusieurs processus partageant le même TGID partagent également, au moins, le même espace mémoire et les mêmes gestionnaires de signaux (parfois plus),
  • si un processus "threadé" a PID=TGID, il peut être appelé "le thread principal",
  • appelant le getpid() de n'importe quel processus renverra son TGID (="main thread" PID),
  • appelant le gettid() de n'importe quel processus renverra son PID (!),
  • tout type de processus peut être créé avec le clone(2) appel système,
  • ce qui est partagé entre les processus est décidé en passant des drapeaux spécifiques à clone(2) ,
  • les noms numériques des dossiers que vous pouvez répertorier avec ls /proc comme /proc/NUMBER sont des TGID,
  • noms numériques des dossiers en /proc/TGID/task comme /proc/TGID/task/NUMBER sont des PID,
  • même si vous ne voyez pas tous les PID existants avec ls /proc , vous pouvez toujours faire cd /proc/any_PID .

Conclusion :du point de vue du noyau, seuls les processus existent, chacun ayant son propre PID unique, et un soi-disant thread est juste un type différent de processus (partageant, au moins, le même espace mémoire et les mêmes gestionnaires de signaux avec un ou plusieurs autres -s).

Remarque : l'implémentation du concept de "thread" sous Linux a conduit à une confusion de vocabulaire, et si getpid() vous ment ne fait pas ce que vous pensiez, c'est parce que son comportement suit la compatibilité POSIX (les threads sont censés partager un PID commun).


Il n'y a absolument aucune différence entre un thread et un processus sous Linux. Si vous regardez clone(2), vous verrez un ensemble d'indicateurs qui déterminent ce qui est partagé et ce qui ne l'est pas entre les threads.

Les processus classiques ne sont que des threads qui ne partagent rien; vous pouvez partager les composants que vous voulez sous Linux.

Ce n'est pas le cas sur d'autres implémentations de système d'exploitation, où il existe des différences beaucoup plus substantielles.


Les threads sont des processus sous Linux. Ils sont créés avec le clone appel système, qui renvoie un ID de processus qui peut être envoyé un signal via le kill appel système, tout comme un processus. Les processus de thread sont visibles en ps production. Le clone l'appel reçoit des indicateurs qui déterminent la part de l'environnement du processus parent qui est partagée avec le processus de thread.


Linux
  1. 30 exercices de processus Linux pour les administrateurs système

  2. Linux – Init Process :ancêtre de tous les processus ?

  3. Linux - Journal des threads passés qui sont maintenant fermés ?

  4. Linux :trouver et tuer les processus zombies

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

Comment répertorier les processus en cours d'exécution sous Linux

Commande Ps sous Linux (liste des processus)

Comment tuer les processus Zombie sous Linux

Surveillance des processus sous Linux

Commandes pour la gestion des processus sous Linux

Comment envoyer des processus en arrière-plan sous Linux