Qu'est-ce qu'un processus zombie?
Un processus zombie est une instance d'un programme informatique qui conserve un enregistrement de table de processus en dépit de son exécution. Les processus obsolètes tels que ceux-ci sont généralement associés à Unix® et à d'autres systèmes d'exploitation similaires en raison de la manière dont ils gèrent les processus enfants. Quand un processus enfant a fini de s'exécuter, le parent est généralement chargé de le supprimer de la table de processus. Il n'est généralement pas possible de supprimer directement un processus zombie avec la commande kill, bien que le parent puisse souvent le supprimer si l'opérateur utilise la notification SIGCHLD (Signal Child). À défaut, un processus zombie peut être supprimé indirectement en tuant le parent.
Le processus de zombie est un terme descriptif métaphorique qui fait référence aux morts-vivants. Les processus obsolètes sous Unix® et des systèmes d'exploitation similaires peuvent être considérés comme analogues aux zombies en ce sens qu'ils maintiennent la présence dans une table de processus même s'ils ne remplissent plus les fonctions prévues. Quand un processus a fini de s'exécuter, on dit parfois qu'il est mort, alors que le moyen par lequel le système d'exploitation récupère son allocation de table de processus peut être appelé moisson. Le processus parent d'un zombie est techniquement supposé récolter ses enfants, bien que cela ne se produise pas toujours.
Dans certains cas, l’existence d’un processus zombie peut être intentionnelle, voire souhaitée. Après l'exécution d'un processus enfant, le parent peut avoir besoin d'exécuter une autre instance du même programme ultérieurement. Si un zombie n'a pas été supprimé de la table des processus, un nouvel enfant ne se verra pas attribuer le même identifiant (ID) que l'ancien. Certains programmes peuvent bénéficier ou même exiger ce type de différenciation.
Si un processus parent n'a pas exécuté la commande wait pour récupérer les zombies dont il est responsable, il peut être possible de forcer le problème. Cela se fait généralement via la commande kill et l'envoi du signal SIGCHLD au processus parent. Si tout fonctionne correctement, un processus parent qui reçoit ce signal doit récupérer ses enfants zombies afin que leurs ID et leurs positions dans la table des processus puissent être réutilisés.
Dans certaines circonstances, un processus parent peut ignorer le signal SIGCHLD. Si cela se produit et que l'opérateur souhaite toujours que la table de processus soit effacée, le processus parent peut être tué. Tous les zombies créés par le processus parent seront ensuite affectés au processus init en tant qu'enfants. Étant donné qu'init lance périodiquement la commande wait sur ses enfants, tous les zombies dont il est responsable seront éventuellement supprimés de la table des processus.