Les processus Linux forment des relations parent-enfant. Un shell lance généralement une commande externe en créant un processus enfant et en faisant exécuter le programme demandé à cet enfant. L’explication classique sépare ce travail en opérations fork et exec.
Processus · Leçon 4
Création des processus
Découvrez comment fork, exec, les PID et les relations parentales participent à la création des processus Linux.
Créer un enfant avec `fork`
L’appel système fork() crée un processus enfant à partir du processus appelant. Le parent et l’enfant poursuivent à partir du point de retour de fork, mais reçoivent des valeurs de retour différentes et possèdent des PID différents.
L’enfant reçoit un état de processus logiquement distinct. Linux peut initialement partager les pages de mémoire physique au moyen de la copie à l’écriture, et ne copier une page que lorsqu’un processus la modifie. Les descripteurs de fichiers ouverts sont hérités et désignent les mêmes descriptions de fichiers ouvertes sous-jacentes ; certains éléments tels que les positions dans les fichiers peuvent donc rester partagés.
Que crée un appel fork() réussi ?
Remplacer un programme avec `execve`
Un appel execve() charge un nouveau programme dans le processus appelant. S’il réussit, il remplace l’image du processus et ne revient pas à l’ancien programme. Le PID reste identique, car execve() ne crée pas de nouveau processus.
De nombreuses commandes de shell suivent donc un modèle fork-exec :
- Le shell crée un enfant.
- L’enfant prépare les redirections et d’autres éléments de l’état d’exécution.
- L’enfant exécute le programme demandé.
- Le shell attend ou continue selon que l’exécution se déroule au premier plan ou en arrière-plan.
Les bibliothèques et les applications peuvent exposer des interfaces de plus haut niveau telles que posix_spawn(), et Linux possède d’autres primitives telles que clone(). Le modèle fork-exec bien connu reste utile sans être la seule interface possible.
Que devient le PID d’un processus après un appel execve() réussi ?
Examiner les identifiants du parent et de l’enfant
PID identifie le processus, tandis que PPID identifie son parent. Demandez explicitement ces champs :
$ ps -o pid,ppid,stat,cmd
Si un shell lance ps, le PID du shell apparaît normalement comme PPID de ce processus ps. Le moment de l’observation compte : les processus très courts peuvent se terminer avant qu’une observation distincte ne les saisisse.
Que représente PPID dans une liste de processus ?
PID 1 et changement de parent
Le noyau démarre le premier processus de l’espace utilisateur avec le PID 1. Selon le système, il peut s’agir de systemd, d’une autre implémentation d’init ou d’un petit init dans un conteneur ou un espace de noms de PID. Le PID 1 démarre et supervise certaines parties de l’environnement utilisateur et possède des responsabilités particulières concernant les signaux et la récupération des orphelins.
Lorsqu’un parent se termine avant son enfant, celui-ci est rattaché à un sous-récupérateur approprié ou au processus init de son espace de noms de PID. Il ne doit pas nécessairement se terminer simplement parce que son parent d’origine a pris fin.
Quelle affirmation sur le PID 1 est exacte ?
L’atelier Gérer et surveiller les processus Linux permet d’observer les identifiants des parents et des enfants pendant l’exécution de commandes au premier plan et en arrière-plan.
Leçon terminée
Vous avez terminé Création des processus
Vous savez maintenant suivre la séquence classique de création des processus Linux.
Employer
fork()pour créer un enfant doté d’un PID distinct.Employer
execve()pour remplacer l’image d’un processus sans modifier son PID.Lire PID et PPID pour identifier les relations parent-enfant.
Reconnaître le PID 1 et les sous-récupérateurs comme destinations des enfants rattachés à un nouveau parent.
Conservez votre progression
Créez un compte gratuit pour enregistrer cette leçon et continuer sur n'importe quel appareil.
Créer un compte gratuit