20Aug

Qu'est-ce qu'un "processus de zombie" sur Linux?

click fraud protection

Si vous êtes un utilisateur de Linux, vous avez peut-être vu des processus de zombies trôner autour de votre liste de processus. Vous ne pouvez pas tuer un processus zombie parce qu'il est déjà mort - comme un zombie réel.

Les zombies sont essentiellement les bits restants des processus morts qui n'ont pas été nettoyés correctement. Un programme qui crée des processus zombies n'est pas programmé correctement - les programmes ne sont pas supposés laisser les processus zombies se dérouler.

Crédit d'image: Daniel Hollister sur Flickr( Remixed)

Qu'est-ce qu'un processus Zombie?

Pour comprendre ce qu'est un processus zombie et ce qui provoque l'apparition de processus zombies, vous devez comprendre un peu comment les processus fonctionnent sous Linux.

Quand un processus meurt sous Linux, tout n'est pas immédiatement retiré de la mémoire - son descripteur de processus reste en mémoire( le descripteur de processus ne prend qu'une petite quantité de mémoire).Le statut du processus devient EXIT_ZOMBIE et le parent du processus est averti que son processus fils est mort avec le signal SIGCHLD.Le processus parent est alors supposé exécuter l'appel système wait() pour lire l'état de sortie du processus mort et d'autres informations. Cela permet au processus parent d'obtenir des informations à partir du processus mort. Après l'appel de wait() , le processus zombie est complètement supprimé de la mémoire.

instagram viewer

Cela se produit normalement très rapidement, donc vous ne verrez pas les processus zombies s'accumuler sur votre système. Cependant, si un processus parent n'est pas programmé correctement et n'appelle jamais wait() , ses enfants zombies resteront en mémoire jusqu'à ce qu'ils soient nettoyés. Les utilitaires

comme GNOME System Monitor, la commande supérieure et la commande ps affichent les processus zombie.

Dangers des processus Zombie

Les processus Zombie n'utilisent aucune ressource système.(En fait, chacun utilise une toute petite quantité de mémoire système pour stocker son descripteur de processus.) Cependant, chaque processus zombie conserve son identifiant de processus( PID).Les systèmes Linux ont un nombre fini d'identifiants de processus - 32767 par défaut sur les systèmes 32 bits. Si les zombies s'accumulent à un rythme très rapide - par exemple, si un logiciel serveur mal programmé crée des processus zombies sous charge - l'ensemble des PID disponibles sera finalement affecté aux processus zombies, empêchant ainsi les autres processus de se lancer.

Cependant, quelques processus zombies qui traînent ne posent aucun problème - bien qu'ils indiquent un bug avec leur processus parent sur votre système.

Se débarrasser des processus Zombie

Vous ne pouvez pas tuer les processus zombies car vous pouvez tuer les processus normaux avec le signal SIGKILL - les processus zombies sont déjà morts. Gardez à l'esprit que vous n'avez pas besoin de vous débarrasser des processus de zombies, sauf si vous avez une grande quantité sur votre système - quelques zombies sont inoffensifs. Cependant, il existe plusieurs façons de se débarrasser des processus de zombies.

Un moyen consiste à envoyer le signal SIGCHLD au processus parent. Ce signal indique au processus parent d'exécuter l'appel système wait() et de nettoyer ses enfants zombies. Envoyer le signal avec la commande kill, en remplaçant pid dans la commande ci-dessous avec le PID du processus parent:

kill -s SIGCHLD pid

Cependant, si le processus parent n'est pas correctement programmé et ignore les signaux SIGCHLD, ceci gagnene t'aide pas. Vous devrez tuer ou fermer le processus parent des zombies. Lorsque le processus qui a créé les zombies se termine, init hérite des processus zombie et devient leur nouveau parent.(init est le premier processus démarré sous Linux au démarrage et est assigné à PID 1.) init exécute périodiquement l'appel système wait() pour nettoyer ses enfants zombies, donc init fera un peu de travail sur les zombies. Vous pouvez redémarrer le processus parent après l'avoir fermé.

Si un processus parent continue de créer des zombies, il devrait être corrigé afin qu'il appelle wait() pour récolter ses enfants zombies. Déposer un rapport de bogue si un programme sur votre système continue de créer des zombies.