- Processus zombie
-
Pour les articles homonymes, voir Zombie.
En informatique, sous les systèmes de type UNIX et similaires, zombie (on utilise plutôt l'orthographe anglaise) est un terme désignant un processus qui s'est achevé, mais qui dispose toujours d'un identifiant de processus (
PID
) et reste donc encore visible dans la table des processus. On parle aussi de processus défunt.Au moment de la terminaison d'un processus, le système désalloue les ressources que possède encore celui-ci mais ne détruit pas son bloc de contrôle. Le système passe ensuite l'état du processus à la valeur
TASK_ZOMBIE
(représenté généralement par un Z dans la colonne « statut » lors du listage des processus par la commandeps
). Le signalSIGCHLD
est alors envoyé au processus père du processus qui s'est terminé, afin de l'informer de ce changement. Dès que le processus père a obtenu le code de fin du processus achevé au moyen des appels systèmeswait
ouwaitpid
, le processus terminé est définitivement supprimé de la table des processus.Il existe un bug classique dans le développement de programme UNIX gérant plusieurs processus : un processus qui crée des fils, mais ne s'occupe pas ensuite d'acquérir leur code de fin. Ceux-ci restent donc sous forme de zombies pendant (au moins) toute la durée d'exécution du processus père. Étant donné que les processus zombies ne peuvent pas être supprimés par les méthodes classiques (y compris pour les utilisateurs privilégiés), le système se retrouve alors encombré de processus achevés (« morts ») mais encore visibles. Ceux-ci ne consomment, à proprement parler, pas plus de ressources systèmes que les quelques octets de mémoire occupés par le bloc de contrôle dans la table des processus ; toutefois, le nombre de processus étant limité par le nombre possible de PID, un trop grand nombre de zombies peut empêcher le système de créer de nouveaux processus. Cette métaphore de horde de processus défunts, impossibles à tuer car déjà morts, est à l'origine du terme de « zombie ».
La seule manière d'éliminer ces processus zombies est de causer la mort du processus père, par exemple au moyen du signal
SIGKILL
. Les processus fils sont alors automatiquement rattachés au processus n°1, généralementinit
, qui se charge à la place du père original d'appelerwait
sur ces derniers. Si ce n'est pas le cas, cela signifie queinit
est défaillant (ou que le processus n°1 n'est pasinit
, mais un autre programme n'ayant pas été prévu pour ça) ; le seul moyen de se débarrasser des zombies, dans ce cas, est le redémarrage du système.Voir aussi
Wikimedia Foundation. 2010.