(Courriels de diversion: <jubiler@zester-versent.com> <accosteront@intitula-bouleversait.com> <rebroussa@alienant-plafonniers.com> <clarines@promotrices-bourbon.com> <degele@fraternisation-flechies.com> <chevalets@demarrerons-rêvait.com> <reconnaissez@boitions-pâlissait.com> <fusait@clins-suppliee.com> <pretextez@entamant-normalises.com> <decolorations@ride-reinscrivions.com> )


François Hillion a écrit :

Question subsidiaire : le kill -9 engendre parfois des zombies. Comment tuer les zombies (si c'est même possible) ?


Un processus reste dans l'état zombie tqnt que son processus père ne l'a pas attendu (en exécutant l'appel système wait). Il possède des informations qui pourraient être demandées par le père (typiquement son code de sortie).

 Comme son nom l'indique un zombie est déjà mort, donc on ne peut le tuer.

Un processus dans l'état zombie n'occupe qu'une entrée dans la table des processus, et rien d'autre (pas d'image mémoire, pas d'espace d'adressage, pas de descripteur de fichiers, rien de rien). Il n'est donc pas vraiment gênant, en général.

Si le processus père meurt avant ses processus fils, ces derniers se voient adoptés par le processus de pid 1 (typiquement init, qui passe son temps à exécuter des appels à wait).

C'est pourquoi quand un processus veut lancer un autre processus sans se préoccuper de ce qu'il advient ensuite, il est courant de faire un un double fork :
fork :
- pere : wait (pour que le fils ne devienne pas zombie)
- fils : fork
- fils : exit
- petit-fils : exec, ou tout autre traitement.


Après le exit du fils, le père revient du wait (le fils ne devient pas zombie), et le petit fils est adopté par init.

 En shell, on btient le même genre d'effets en faisant : (programme &) &

--
Marc Thirion                   | Ramonville Saint-Agne, France
Projet Internet et Citoyenneté : http://www.le-pic.org/


-------------------------------------------------------------------- Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>