Les quatre fils auront le même PID, mais seulement lorsqu'ils seront vus depuis le site ci-dessus. Ce qu'il faut faire usted (en tant qu'utilisateur) appelle un PID n'est pas ce que le noyau (vu d'en bas) appelle un PID.
Dans le cadre de la noyau, chaque thread a son propre identifiant, appelé PID, bien qu'il serait peut-être plus logique de l'appeler TID, ou thread ID, et il a également un TGID (thread group ID) qui est le PID du premier thread qui a été créé lors de la création du processus.
Lorsqu'un nouveau processus est créé, il apparaît comme un fil dont le PID et le TGID sont tous deux le même numéro (actuellement inutilisé).
Lorsqu'un fil de discussion en démarre un autre fil, ce nouveau thread obtient son propre PID (afin que le planificateur puisse le programmer indépendamment) mais il hérite du TGID du thread d'origine.
De cette manière, le noyau peut programmer des threads indépendamment du processus auquel ils appartiennent, tandis que les processus (ID de groupes de threads) vous sont signalés.
La hiérarchie suivante des fils peut être utile (a) :
USER VIEW
vvvv vvvv
|
<-- PID 43 -->|<----------------- PID 42 ----------------->
| |
| +---------+ |
| | process | |
| _| pid=42 |_ |
__(fork) _/ | tgid=42 | \_ (new thread) _
/ | +---------+ | \
+---------+ | | +---------+
| process | | | | process |
| pid=43 | | | | pid=44 |
| tgid=43 | | | | tgid=42 |
+---------+ | | +---------+
| |
<-- PID 43 -->|<--------- PID 42 -------->|<--- PID 44 --->
| |
^^^^^^ ^^^^
KERNEL VIEW
Vous pouvez constater que le démarrage d'un nouveau processus (à gauche) vous donne un nouveau PID y un nouveau TGID (les deux ayant la même valeur). Le démarrage d'un nouveau fil (à droite) vous donne un nouveau PID tout en conservant le même TGID que le fil qui l'a démarré.
(a) Tremblez d'admiration à mes impressionnantes compétences graphiques :-)