Comment tuer des processus zombies sur Linux

Nov 25, 2024
Linux
Fatmawati Achmad Zaenuri / Shutterstock
[dix]

Les programmes mal écrits ou performants peuvent laisser Processus de zombie se cacher à l'intérieur de votre ordinateur Linux. Découvrez comment les zombies sont créés et comment vous pouvez enfin les poser de vous reposer.

Comment les états de processus fonctionnent sur Linux

Linux, bien sûr, doit garder une trace de toutes les applications et des démons à exécuter sur votre ordinateur. L'une des façons de maintenir la table de processus. Ceci est une liste de structures dans la mémoire du noyau. Chaque processus a une entrée dans cette liste qui contient des informations à ce sujet.

Il n'y a pas beaucoup de choses dans chacune des structures de la table de processus. Ils tiennent la ID de processus , quelques autres éléments de données et un pointeur au bloc de contrôle de processus (PCB) pour ce processus.

C'est le PCB qui détient les nombreux détails que Linux doit rechercher ou définir chaque processus. Le PCB est également mis à jour en tant que processus créé, de temps de traitement, et finalement détruit.

Le PCB Linux contient plus de 95 champs. C'est défini comme une structure appelée task_truct.h et c'est plus de 700 lignes de long. Le PCB contient les types d'informations suivants:

  • État du processus : Les états sont décrits ci-dessous.
  • Numéro de processus : Son identifiant unique dans le système d'exploitation.
  • Compteur de programme : Lorsque ce processus est ensuite donné l'accès à la CPU, le système utilisera cette adresse pour trouver la prochaine instruction du processus qui doit être exécutée.
  • Registres : La liste des registres de la CPU utilisées par ce processus. La liste peut contenir des accumulateurs, des registres d'index et des pointeurs de pile.
  • Liste de fichiers ouverte : Fichiers associés à ce processus.
  • Information de planification du processeur : Utilisé pour déterminer à quelle fréquence, et pendant combien de temps, le temps de traitement de la CPU est attribué à ce processus. La priorité du processus, les pointeurs vers la planification des files d'attente et d'autres paramètres de planification doivent être enregistrés dans le PCB.
  • Informations sur la gestion de la mémoire : Détails sur la mémoire Ce processus utilise, telles que les adresses de démarrage et de fin de la mémoire de processus et des pointeurs vers les pages de mémoire.
  • Informations sur l'état des E / S : Tous les dispositifs d'entrée ou de sortie utilisés par le processus.

L'état "Process State" peut être n'importe lequel des éléments suivants:

  • R: Un processus en cours d'exécution ou exécutable. Courir signifie qu'il reçoit des cycles de processeur et d'exécuter. Un processus runnable est prêt à exécuter et à attendre une fente de la CPU.
  • S: Un processus de sommeil. Le processus attend qu'une action complète, telle qu'une opération d'entrée ou une sortie, ou pour une ressource à devenir disponible.
  • RÉ: Le processus est dans un état de sommeil ininterrompu. Il utilise un appel du système de blocage et ne peut pas continuer tant que les appels système sont terminés. Contrairement à l'état "Sommeil", un processus dans cet état ne répondra pas aux signaux tant que l'appel du système n'est pas terminé et que l'exécution est renvoyée au processus.
  • T: Le processus s'est terminé (arrêté) parce qu'il a reçu le Sigstop signal. Ce ne répondra que à la Sigkill ou Sigcont Les signaux, qui tuent le processus ou leur demandent de continuer, respectivement. C'est ce qui se passe lorsque vous échangez de au premier plan ( fg ) à Contexte ( bg) Tâches.
  • Z: Un processus de zombie. Lorsqu'un processus se termine, il ne manque pas de disparaître. Il libère toute mémoire qu'il utilise et se supprime de mémoire, mais son entrée dans la table de processus et la PCB restent. Son état est défini sur Exit_zombie et son processus parent est notifié (par le Sigchld signal) que le processus enfant a fini.

Dans l'État zombie, le processus parent appelle l'un des attendre() familles de fonctions lorsque le processus d'enfant est créé. Il attend ensuite un changement d'état dans le processus d'enfant. Le processus d'enfant a-t-il été arrêté, continua ou tué par un signal? Est-ce que cela s'est terminé par l'achèvement naturel de son code?

Si le changement d'état est un élément qui signifie que le processus enfant a cessé de fonctionner, son code de sortie est lu. Ensuite, le PCB de l'enfant est détruit et son entrée dans la table de processus est supprimée. Idéalement, tout cela se passe en un clin d'œil et les processus de l'État zombie n'existent pas depuis très longtemps.

EN RELATION: Comment exécuter et contrôler les processus de fond sur Linux

Qu'est-ce qui cause des processus zombies sur Linux?

Un processus parent mal écrit pourrait ne pas appeler le attendre() fonction lorsque le processus d'enfant est créé. Cela signifie que rien ne regarde les changements d'État dans le processus d'enfant et le Sigchld le signal sera ignoré. Ou peut-être une autre application affecte peut-être l'exécution du processus parent, soit en raison d'une programmation médiocre ou d'une intention malveillante.

Toutefois, si le processus parent ne surveille pas les changements d'état dans le processus d'enfant, le système de ménage du système approprié ne se produira pas. Le PCB et l'entrée dans la table de processus ne seront pas supprimés lorsque le processus d'enfant se termine. Il en résulte que l'État zombie n'a jamais été retiré du PCB.

Les zombies utilisent un peu de mémoire, mais ils ne posent généralement pas de problème. L'entrée dans la table de processus est petite, mais jusqu'à ce qu'elle soit libérée, l'ID de processus ne peut pas être réutilisé. Sur un système d'exploitation de 64 bits, il est peu probable que ce soit des problèmes car le PCB est beaucoup plus grand que l'entrée de la table de processus.

Un grand nombre de zombies pourrait, éventuellement, affecter la quantité de mémoire gratuite pour d'autres processus. Si vous avez beaucoup de zombies, cependant, vous avez un problème grave avec l'application parent ou un bogue système d'exploitation.

Comment supprimer les processus zombies

Vous ne pouvez pas tuer un processus de zombie parce que c'est déjà mort. Il ne répondra à aucun signal, car il a été retiré de la mémoire - il n'y a nulle part d'envoyer un Sigkill signal. Vous pouvez essayer d'envoyer le Sigchld Signalez au processus parent, mais si cela ne fonctionnait pas lorsque le processus d'enfant s'est terminé, il est peu probable de travailler maintenant, non plus.

La seule solution fiable est de tuer le processus parent. Quand il est terminé, ses processus enfants sont hérités par le init processus, qui est le premier processus à exécuter dans un système Linux (son identifiant de processus est 1).

Les init processus effectue régulièrement le nettoyage nécessaire des zombies, afin de les tuer, il vous suffit de tuer le processus qui les a créés. Les Haut La commande est une façon commode de voir si vous avez des zombies.

Tapez les éléments suivants:

  Top  

Ce système comporte huit processus zombies. Nous peut énumérer ces en utilisant le ps commander et la tuer dans Egrep . Encore une fois, les processus de zombies ont un drapeau d'état de "Z" et vous verrez généralement "défunt".

Tapez les éléments suivants:

 PS AUX | Egrep "z | défunt" 

Les processus zombies sont répertoriés.

Ceci est une façon de découvrir les ID de processus des zombies que de faire défiler l'arrière Haut . Nous voyons également qu'une application appelée «Badprg» a engendré ces zombies.

L'ID de processus du premier zombie est de 7641, mais nous devons trouver l'ID de processus de son processus parent. Nous pouvons le faire en utilisant ps de nouveau. Nous utiliserons l'option de sortie ( -o ) dire ps Pour afficher uniquement l'ID de processus du parent, puis transmettez-le avec le ppid = drapeau.

Le processus que nous voulons trouver sera indiqué en utilisant le -p option (processus), puis en passant dans l'ID de processus du zombie.

Par conséquent, nous tapissons la commande suivante pour rechercher les informations de processus du processus 7641, mais elle ne signalera que l'ID du processus parent:

 PS -O PPID = -P 7641 

On nous dit que l'ID de processus parent est de 7636. Nous pouvons maintenant faire référence à cela en utilisant ps une fois de plus.

Nous voyons que cela correspond au nom du processus parent de plus tôt. Pour tuer le processus parent, utilisez l'option Sigkill avec la commande Kill comme suit:

 Tuez -Sigkill 7636 

En fonction du propriétaire du processus parent, vous devrez peut-être également utiliser. sudo .

Les zombies ne sont pas effrayantes ...

... à moins qu'ils ne soient dans une horde massive. Quelques-uns ne sont pas à craindre et un simple redémarrage les essuyera.

Toutefois, si vous remarquez qu'une application ou un processus est toujours des zombies de frai, c'est quelque chose que vous devriez examiner. Il est fort probable qu'un programme écrit de théâtre, auquel cas, peut-être une version mise à jour qui se nettoie correctement après ses processus enfants.


Linux - Most Popular Articles

Comment trouver et supprimer les liens symboliques cassés sur Linux

Linux Nov 12, 2024

Fatmawati Achmad Zaenuri / Shutterstock [dix] Les liaisons symboliques sur Linux sont une caractéristique fantastique, mais elles peuvent devenir cassée..


Quoi de neuf dans Gnome 40?

Linux Jul 23, 2025

Fondation Gnome [dix] GNOME 40 a plus qu'un nouveau système de numérotation. Avec son nouveau look vient une nouvelle façon de travailler. Les ancienne..


Comment se déconnecter de votre Mac à l'aide de la borne

Linux Aug 8, 2025

Apple facilite la déconnexion de votre Mac avec l'option dans la barre de menus du bureau. Mais il y a aussi quelques commandes que vous pouvez utiliser pour vous déconnecter à l'aide..


Comment faire rouler le noyau sous Linux

Linux Sep 30, 2025

Fatmawati Achmad Zaenuri / Shutterstock.com [dix] Si votre PC Linux a soudainement des problèmes après une mise à jour de votre système, c'est possibl..


Le jeu indigène sur Linux peut être en train de mourir, et c'est bon

Linux Sep 27, 2025

DC Studio / Shutterstock.com [dix] Les Terrasse à vapeur , annoncé en août 2021, a des cercles de jeu Linux parlant de l'avenir du jeu sur ..


Quoi de neuf dans Gnome 41?

Linux Sep 16, 2025

Environnement de bureau Linux GNOME 41 a été publié le 22 septembre 2021. Il est chaud sur les talons des changements de flux de travail paradigme paradigme de Gnome 40, Gn..


Quels sont les inconvénients du passage à Linux?

Linux Oct 27, 2025

Larry Ewing et la Gimp [dix] Linux évangélistes (comme moi) sont prompts à souligner les nombreux avantages du passage de Windows et Mac OS. Mais aucun..


Ubuntu 21.10 arrive avec un bureau à gnome 40 personnalisé

Linux Oct 14, 2025

Ubuntu Si vous êtes un utilisateur Ubuntu, ou une personne qui pense à essayer d'essayer, aujourd'hui est une bonne journée. Canonical a officiellement publié Ubuntu ..


Catégories