GNU/Linux >> Tutoriels Linux >  >> Linux

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

J'ai toujours appris que le processus init est l'ancêtre de tous les processus. Pourquoi le processus 2 a-t-il un PPID de 0 ?

$ ps -ef | head -n 3
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 May14 ?        00:00:01 /sbin/init
root         2     0  0 May14 ?        00:00:00 [kthreadd]

Réponse acceptée :

Premièrement, "ancêtre" n'est pas la même chose que "parent". L'ancêtre peut être le parent du parent … le parent du parent, et le noyau ne garde la trace que d'un seul niveau.
Cependant, lorsqu'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 comme des processus utilisateur, en ce qui concerne la planification. (Ils n'obéissent pas aux règles habituelles de gestion de la mémoire puisqu'ils exécutent le code du noyau.) Ces processus sont tous généré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 que ps les répertorie 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.

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 le kernel.modprobe valeur sysctl. Lorsqu'un programme vide le noyau, le noyau appelle le programme indiqué par kernel.core_pattern le cas échéant.


Linux
  1. UNIX / Linux :3 façons d'envoyer un signal aux processus

  2. Processus UNIX / Linux :fonction C fork()

  3. Linux :trouver et tuer les processus zombies

  4. Comment trouver tous les processus enfants ?

  5. Quelle est la source actuelle du noyau 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