Premièrement, «ancêtre» n'est pas la même chose que «parent». L'ancêtre peut être le parent du parent… parent du parent, et le noyau ne garde qu'une trace d'un niveau. Cependant, quand un processus meurt, ses enfants sont adoptés par init, vous verrez donc beaucoup de processus dont le parent est 1 sur un système typique.
Les systèmes Linux modernes ont en outre quelques processus qui exécutent le code du noyau, mais sont gérés en tant que processus utilisateur, en ce qui concerne la planification. (Ils n'obéissent pas aux règles de gestion de la mémoire habituelles car ils exécutent du code noyau.) Ces processus sont tous engendrés par kthreadd
(c'est l'init des threads du noyau). Vous pouvez les reconnaître par leur ID de processus parent (2) ou, généralement, par le fait qu'ils les ps
répertorient avec un nom entre crochets ou par le fait que /proc/2/exe
(normalement un lien symbolique vers l'exécutable du processus) ne peut pas être lu.
Les processus 1 ( init
) et 2 ( kthreadd
) sont créés directement par le noyau au démarrage, ils n'ont donc pas de parent. La valeur 0 est utilisée dans leur champ ppid pour l'indiquer. Pensez à 0 comme signifiant «le noyau lui-même» ici.
Linux dispose également de certaines fonctionnalités permettant au noyau de démarrer des processus utilisateur dont l'emplacement est indiqué via un paramètre sysctl dans certaines circonstances. Par exemple, le noyau peut déclencher des événements de chargement de module (par exemple, lorsqu'un nouveau matériel est découvert ou lorsque certains protocoles réseau sont utilisés pour la première fois) en appelant le programme dans la kernel.modprobe
valeur sysctl. Lorsqu'un programme vide le noyau, le noyau appelle le programme indiqué par le kernel.core_pattern
cas échéant.
init
est de même de «l'ancêtre» de toususer threads
, tandis que[kthreadd ]
le «parent» de touskernel threads
, n'est-ce pas? THX!kernel.core_pattern
lorsqu'un programme vide le noyau. Sur un système typique, vous ne les verrez pas car ces processus ont tendance à faire leur travail rapidement puis à se terminer.