Que sont les processus zombies sous Linux et comment les tuer

Processus de zombie. Tout le monde n'a pas entendu parler de ce mot intéressant mais effrayant lié au système d'exploitation Linux. Sur un ordinateur personnel, les processus zombies peuvent ne pas être une menace pour un utilisateur régulier, mais lorsqu'il s'agit de serveurs Linux, ces processus doivent être identifiés et arrêtés.

De tels processus peuvent causer des problèmes avec la table de processus de votre système et, à leur tour, altérer le bon fonctionnement de votre machine. Par conséquent, dans cet article, nous aborderons en détail les processus zombies, ainsi qu'un guide complet sur la recherche et l'élimination des processus zombies sur une machine Linux.

Quels sont les processus Zombie?

Mais avant tout cela, il est important que vous sachiez ce que sont réellement les processus zombies. Ce ne sont que des processus morts et obsolètes qui occupent de l'espace sur la table des processus système. Un bloc de contrôle de processus ou PCB est une structure de données qui stocke les détails associés aux processus individuels en cours d'exécution sur votre système.

La table de processus se compose de l'ID de processus, d'un lien vers le PCB et d'autres informations utiles liées au processus. Les processus Zombie ont leurs propres identifiants de processus et informations de gestion de la mémoire. Étant donné que le système d'exploitation Linux a un nombre limité d'ID de processus disponibles, les autres processus ne peuvent pas utiliser les PID jusqu'à ce que le processus zombie s'arrête.

Bien qu'un ou deux processus zombies ne causent aucune interruption ou problème de performances sur votre ordinateur, un grand nombre de ces processus peuvent nuire au flux de travail de votre système en inondant la table de processus et les ressources.

Quelles sont les causes des processus zombies sous Linux?

Pour comprendre en détail la cause sous-jacente d'un processus zombie, vous devrez apprendre comment les processus démarrent et s'arrêtent sous Linux. Le système d'exploitation Linux surveille tous les processus et démons en cours d'exécution sur un ordinateur. La table de processus est une liste de structures qui contient tous les processus en cours d'exécution sur votre machine.

Chaque entrée de processus dans la table de processus consiste en un lien vers le bloc de contrôle de processus de ce processus spécifique. Le PCB stocke les détails associés à ce processus particulier. Ces détails comprennent:

  1. État du processus : l'état actuel du processus
  2. Numéro de processus : un numéro unique utilisé pour identifier le processus
  3. Compteur de programme : contient des informations relatives à l'instruction suivante
  4. Registers : Liste de tous les registres CPU utilisés par le processus
  5. Ouvrir la liste des fichiers: fichiers utilisés par le processus
  6. Informations de planification du processeur : contient des informations associées au temps processeur et aux ressources allouées au processus
  7. Informations de gestion de la mémoire : Inclut des détails sur la quantité de mémoire utilisée par le processus
  8. Informations E / S : liste des périphériques d'entrée ou de sortie utilisés par le processus

Linux utilise les états de processus suivants pour décrire tous ses processus.

  • R : processus en cours
  • S : processus de sommeil
  • D : processus de sommeil ininterrompu
  • T : processus terminé
  • Processus Z : Zombie

Chaque fois qu'un processus termine la tâche assignée, son état de processus est défini sur Zombie ou Z. Chaque processus a un processus parent qui appelle une famille de fonctions nommée wait () qui attend le changement d'état d'un processus. Par exemple, si l'état du processus passe de Running à Zombie , la méthode wait () sera déclenchée.

La méthode wait () supprime généralement le bloc de contrôle de processus lié à ce processus zombie, puis supprime l'entrée de ce processus de la table de processus.

Mais parfois, en raison du mauvais développement d'un programme, le processus parent n'appelle pas la fonction wait () . Et par conséquent, le système ne supprime pas le PCB du processus zombie. L'entrée de la table de processus pour ce processus spécifique reste également intacte.

Cela confère au processus zombie une durée de vie infinie. Étant donné que le système ne peut pas tuer le processus, l'entrée de processus n'est jamais supprimée et le PID n'est jamais libéré.

En savoir plus: moyens de tuer les programmes qui ne répondent pas sous Linux

Comment trouver les processus Zombie?

La première étape pour supprimer les processus zombies de votre système consiste à analyser quel processus a l'état de processus Zombie . Bien que vous ne puissiez pas tuer ces processus directement car le système les a déjà supprimés de la mémoire, vous pouvez tuer le processus parent qui leur est associé.

Tout d'abord, vous devez vérifier si la table de processus de votre système a un processus zombie. Vous pouvez le faire facilement en utilisant la commande top . Ouvrez simplement votre terminal et tapez:

 top

Vous verrez une sortie similaire à celle-ci. Notez le nombre de processus zombies en haut de la fenêtre du terminal. Si la sortie est égale à zéro, vous n'avez pas à vous inquiéter.

Vous pouvez lister les informations relatives à ces processus zombies en envoyant la commande ps avec egrep . Egrep est une extension de la commande grep sous Linux qui traite tous les modèles comme une chaîne regex étendue.

En relation: Le guide du débutant sur les expressions régulières avec Python

Tapez la commande suivante pour répertorier tous les processus zombies:

 ps aux | egrep "Z|defunct"

La commande mentionnée ci-dessus recherchera les lignes contenant soit Z soit une valeur défunte dans la sortie générée par la commande ps. La sortie se compose d'une liste des processus zombies en cours d'exécution sur votre système.

Tuer des processus de zombies à l'aide de la commande kill

Maintenant que vous savez quels processus zombies sont actuellement en train de ronger vos ressources système, il est temps de tuer ces processus.

Bien que le moyen le plus simple de tuer les processus zombies soit de redémarrer votre ordinateur, ce n'est parfois pas une option réalisable, surtout si vous administrez un serveur.

Pour tuer les processus zombies sans arrêter votre serveur, notez l'ID de processus de tout processus zombie. Dans la section précédente, nous pouvons voir que le PID du processus zombie était 18614. Ensuite, utilisez ce PID pour trouver l'ID du processus parent.

 ps -o ppid= -p 18614

Production:

 18613

Vérifiez si l'ID de processus parent existe à l'aide de la commande ps .

 ps -e | grep 18613

Maintenant que nous avons confirmé l'existence du processus parent, il est temps de le tuer. Passez l'indicateur -SIGKILL avec la commande kill comme suit:

 sudo kill -SIGKILL 18613

Une fois que vous avez tué le processus parent, le système supprimera le processus zombie et le supprimera automatiquement de la table de processus.

Gérer efficacement les processus sous Linux

Chaque administrateur système doit donner la priorité aux processus de surveillance s'exécutant sur une machine Linux. Bien que les processus zombies ne soient pas nécessairement nocifs pour votre système, ils peuvent entraîner des problèmes de performances s'ils existent en grand nombre.

Si vous êtes un utilisateur Linux débutant et que vous n'avez aucune idée de la façon dont le système d'exploitation Linux gère les processus, apprendre ce que sont les processus en premier est un bon point de départ.