Suppression du process zombie de la table de process

Est-ce que quelqu'un peut expliquer quand le process parent reçoit l'état de sortie d'un process fils mort via wait , qui réalloue réellement la memory du process enfant et la supprime de la table des process?

    Manipuler la table de process et les mappages de memory est toujours le travail du kernel. Le kernel agit quand un process fait un appel système. Lorsqu'un process se ferme, toutes les ressources qu'il utilise, y compris la memory, à l'exception de l'input dans la table de process, sont supprimées – c'est ce que fait l' _exit système _exit . Ensuite, lorsque le process parent appelle wait ou waitpid , une partie du travail de cet appel système consiste à nettoyer l'input de la table de process. Le process parent peut décider d'appeler wait quand il le souhaite (si le parent est init , il appelle wait presque tout le time).

    Le kernel suppose que le process parent est intéressé à connaître le résultat de tout process enfant qu'il a intercepté. Lorsqu'un process enfant se termine, il envoie automatiquement un signal SIGCHLD au process parent. Si le parent ignore explicitement le signal SIGCHLD , l'enfant est immédiatement nettoyé et retiré complètement (et ne devient pas un zombie). Sinon, l'enfant devient un zombie jusqu'à ce que le parent appelle l'une des fonctions d' wait pour récupérer le statut de fin de l'enfant.

    Si le statut n'est pas récupéré, l'enfant rest un zombie. Toutefois, si le process parent se termine avant le process enfant, l'enfant est adopté par init (process 1), qui collecte immédiatement le statut, supprimant ainsi le process zombie.