Cette leçon explore les concepts fondamentaux de la manière dont les nouveaux processus sont démarrés sur un système Linux. Comprendre ce mécanisme donne un aperçu du fonctionnement interne du système d'exploitation.
Le Modèle Fork et Exec
Le mécanisme principal pour la création de processus sous Linux implique qu'un processus existant se clone à l'aide de l'appel système fork. L'appel fork crée un processus enfant presque identique. Ce nouveau processus enfant reçoit son propre identifiant de processus (PID) unique, tandis que le processus d'origine devient son parent, identifié par un identifiant de processus parent (PPID).
Après le fork, le processus enfant peut soit continuer à exécuter le même programme que son parent, soit, plus couramment, utiliser l'appel système execve pour charger et exécuter un nouveau programme. L'appel execve remplace effectivement l'espace mémoire du processus par celui du nouveau programme, permettant à une tâche différente de commencer. Ce modèle en deux étapes "fork-exec" est une pierre angulaire de la manière dont vous créez un processus sous Linux.
Observation des Relations Parent-Enfant
Nous pouvons observer cette relation parent-enfant en action en utilisant la commande ps :
ps l
L'option l fournit une vue au "format long", montrant plus de détails sur les processus en cours d'exécution. Vous verrez une colonne intitulée PPID, qui signifie Parent Process ID (Identifiant du Processus Parent). Regardez le processus de votre shell actuel (par exemple, bash). Lorsque vous exécutez la commande ps l, vous remarquerez que le PID de votre processus shell correspond au PPID du processus ps l. C'est parce que votre shell s'est forké pour créer le processus ps.
Le Processus Init
Si chaque processus est l'enfant d'un autre, il doit y avoir un ancêtre original. C'est le processus init. Lorsque le système démarre, le noyau crée init comme tout premier processus de l'espace utilisateur, lui attribuant un PID de 1. Le processus init est le parent ultime de tous les autres processus et s'exécute avec les privilèges root pour gérer le système. Il ne peut pas être terminé tant que le système n'est pas éteint et est responsable du lancement de nombreux services qui maintiennent le système en fonctionnement.