Sommaire

Relations entre processus parent et enfant Processus:parent et enfant

Nous avons vu que, lorsqu’un processus se termine par l’appel système _exit(), le noyau transmet une valeur au processus parent. Ce code retour du processus est un entier sur 16 bits. Par défaut, tant que le processus parent ne s’est pas mis en état de recevoir cette information, le noyau maintient une entrée pour le processus enfant dans sa table des processus. Par contre, toutes les ressources allouées au processus enfant (zones mémoire, descripteurs de fichiers, verrous, etc.) sont libérées. On peut donc considérer que ce processus n’a plus aucune réalité, même s’il figure encore dans la table des processus du noyau. Cet état intermédiaire est appelé état zombie, le processus n’étant ni « vivant » (on ne peut pas le terminer par un appel système kill()) ni « mort » (son identifiant de processus est toujours attribué).

1. Appel système wait()

Pour éviter ce phénomène, le processus parent peut exécuter l’un des appels système de la famille wait(). Dans ce cas, quand le processus enfant se termine, le processus parent sort de l’appel système, reçoit comme code retour l’identifiant du processus enfant terminé, et, dans la zone mémoire qu’il a fournie en argument, la valeur passée à l’appel ...