Sommaire

Créer un processus : fork() Processus:créer

Comme nous l’avons dit, un processus est toujours créé à partir d’un autre processus, exception faite du processus init (ou systemd) et de quelques processus exécutant des composants du noyau.

L’appel système permettant de demander la création d’un processus est fork(). Ses principales phases sont les suivantes :

  • Le processus exécute la fonction enveloppe fork(), qui n’attend aucun argument, et attend le retour de l’appel.

  • Le noyau duplique le processus pour créer un nouveau processus. Il partage la zone de code (text segment), puisque les deux processus exécutent le même code et que la zone mémoire est en lecture seule, et il duplique les autres zones (données, pile, tas, environnement).

Le noyau ne duplique pas vraiment les zones de données, il les partage en mode « copy on write » : il ne duplique effectivement une page mémoire d’une de ces zones qu’au moment où elle est accédée pour modification par l’un des deux processus. Cela permet d’accélérer considérablement la création d’un processus et d’optimiser l’occupation de la mémoire (seules les pages réellement différentes dans les deux processus sont distinctes en mémoire).

  • Le noyau modifie quelques attributs du processus enfant.

Le processus enfant est presque identique au processus ...