Comment trouver et tuer un processus de zombie sur Linux

Comment trouver et tuer un processus de zombie sur Linux
Un zombie est une créature qui était un humain et qui est mort mais en quelque sorte à cause d'un virus ou d'une raison pour laquelle il s'est réveillé à nouveau. Il est déjà mort mais marche et bouge. Ceci est le concept d'un zombie décrit dans les films et les romans. De la même manière dans Linux, un processus zombie est un processus qui a été supprimé du système comme «disparu» mais qui s'exécute en quelque sorte dans la mémoire du système est appelé processus zombie. Jusqu'à ce qu'un processus d'enfant soit éliminé d'une table de processus, elle se transforme en zombie en premier.

Un processus à l'état terminé est un autre nom pour cela. Il est nettoyé à partir de la mémoire en utilisant son processus parent. Lorsque le processus parent n'est pas informé du changement, le processus de l'enfant devient le processus zombie et il n'obtient aucun signal de licenciement afin qu'il puisse laisser la mémoire. Dans Linux, chaque fois qu'un processus est supprimé de la mémoire, son processus parent est informé de la suppression. Ce processus reste dans la mémoire jusqu'à ce qu'il informe son processus parent.

Cela signifie que le processus mort n'est pas supprimé de la mémoire immédiatement et qu'il continue dans la mémoire système devenant ainsi un processus zombie. Pour supprimer un processus de zombie, le processus parent appelle la fonction wait (). Une fois que la fonction attend () est appelée en jeu, le processus de zombie est complètement supprimé du système.

Tuer un processus de zombie

Avant de déménager pour tuer le processus de zombie, nous discuterons d'abord des risques de processus de zombie et des causes du processus de zombie se déroulent. De plus, nous en apprendrons plus sur le processus de zombie pour faciliter la compréhension du processus de mise à mort.

Quelle est la cause du processus zombie

Il peut y avoir deux causes majeures du processus de zombie. Le premier est celui dans lequel le processus parent n'est pas en mesure d'appeler la fonction Wait () lorsque le processus de création de l'enfant est en cours d'exécution, ce qui conduit à ignorer le sigchld. Cela peut provoquer le processus de zombie. Le second est celui dans lequel l'autre application peut affecter l'exécution du processus parent en raison d'un mauvais codage ou d'un contenu malveillant.

En d'autres termes, nous pouvons dire que le processus de zombie est causé lorsque le processus parent ignore les changements de l'état du processus de l'enfant ou qu'il ne peut pas vérifier l'état du processus de l'enfant, lorsque le processus de l'enfant se termine, le PCB n'est pas effacé.

Le processus de zombie présente-t-il un risque

Le processus de zombie ne présente aucun risque, ils utilisent simplement une partie de la mémoire dans le système. La table de processus est de petite taille mais l'ID du tableau où le processus de zombie est stocké ne peut pas être utilisé jusqu'à ce qu'il soit libéré par le processus zombie. Mais dans le cas où il y a beaucoup de processus zombies réservant l'emplacement de la mémoire et aucun espace mémoire pour d'autres processus, il devient difficile pour d'autres processus de s'exécuter.

Trouver un processus de zombie

Avant de tuer le processus de zombie, il est nécessaire de les trouver. Pour trouver le processus de zombie, nous exécuterons la commande suivante dans le terminal:

Linux @ Linux-VirtualBox: ~ $ ps Aux | Egrep "Z | défunt"

Dans la commande ci-dessus, «PS» signifie l'état de processus qu'il est utilisé pour afficher l'état du processus qui s'exécute dans le système avec la commande PS. Nous avons passé le drapeau Aux dans lequel «A» indique les détails de tous les processus associés dans le terminal, «u» indique les processus qui sont dans la liste d'utilisateurs et le «x» indique les processus qui ne sont pas exécutés à partir du terminal. En combinaison, nous pouvons dire qu'il est utilisé pour imprimer tous les processus en cours qui sont stockés dans la mémoire.

La deuxième option dépassée «Egrep» est un outil de traitement utilisé pour récupérer les expressions ou les modèles dans un emplacement spécifié. Enfin, nous avons passé le mot-clé «z | défunt» qui désigne le processus zombie qui doit être récupéré dans la mémoire. Lorsque nous exécutons la commande, nous obtiendrons la sortie suivante, qui montre le processus de zombie dans le système avec son «PID».

Sortir:

Utilisateur PID% CPU% mem vsz rss tty stat start Time Commande
Linux 33819 0.0 0.0 18008 724 PTS / 0 S + 20:22 0:00 grep -e --color = auto z | défunt

Les processus de zombies sont déjà des processus morts, mais le processus parent n'est pas en mesure de lire son statut et ne peut pas être libéré de mémoire. Ainsi, le processus mort ne peut pas être tué. Nous ne pouvons faire que pour eux pour permettre au processus parent de lire l'état de l'enfant afin qu'il puisse être exécuté et supprimé du tableau de processus. Pour cela, nous exécuterons la commande mentionnée ci-dessous.

Linux @ Linux-VirtualBox: ~ $ ps -o ppid = -p 33819

Dans la commande ci-dessus, nous avons essayé d'obtenir l'ID parent du processus zombie. Après avoir obtenu l'ID parent, nous exécuterons la commande suivante pour tuer le processus de zombie en envoyant le Sigchld au processus parent qui permet au processus parent de lire l'état de l'enfant:

Linux @ Linux-VirtualBox: ~ $ kill -s Sigchld Parent_pid

Dans la commande ci-dessus, nous passons le signal à l'ID parent pour tuer le processus zombie de l'ID parent qui lui est transmis. Une fois la commande ci-dessus exécutée, il passera simplement à la ligne suivante sans imprimer aucune sortie sur le terminal au cas où aucun identifiant de parent n'existe. Pour vérifier le processus si le processus de zombie est tué ou non, vous pouvez exécuter la commande que nous avons déjà exécutée pour trouver le processus de zombie.

Essayons une autre façon de tuer le processus de zombie qui se fait en tuant le processus parent lui-même. C'est le moyen le plus efficace de tuer le processus de zombie car il supprimera complètement l'ensemble du processus et ne permettra pas au zombie de se reproduire. Pour cela, nous exécuterons la commande ci-dessous:

Linux @ Linux-VirtualBox: ~ $ kill -9 parent_pid

Après avoir exécuté la commande ci-dessus, nous permettons au système de tuer le processus parent.

Conclusion

Nous avons brièvement discuté du processus de zombie ainsi que les causes et la procédure pour tuer ces processus. Avant de nous diriger vers notre processus de mise à mort, nous avons essayé d'expliquer les raisons de leur cause ainsi que les moyens de les identifier en utilisant des commandes simples.