Maison  >  Article  >  Tutoriel système  >  Comment gérer les processus zombies ?

Comment gérer les processus zombies ?

WBOY
WBOYavant
2024-03-06 20:10:241020parcourir

Comment gérer les processus zombies ?

Qu'est-ce qu'un processus zombie ?

Nous savons tous comment fonctionnent les processus. Nous démarrons un programme, démarrons notre tâche, puis lorsque la tâche est terminée, nous arrêtons le processus. Lorsqu'un processus s'arrête, il est supprimé de la table des processus.

Vous pouvez consulter la progression actuelle via System-Monitor.

Cependant, il arrive parfois que certains programmes restent dans la table des processus même après avoir été exécutés.

Ainsi, ces processus qui ont terminé leur cycle de vie mais restent toujours dans la table des processus sont appelés « processus zombies ».

Comment gérer les processus zombies ?

Contenu

Comment sont-ils produits ?

Lorsque vous exécutez un programme, il génère un processus parent et de nombreux processus enfants. Tous ces processus enfants consomment la mémoire et les ressources CPU qui leur sont allouées par le noyau.

Une fois l'exécution terminée de ces processus enfants, ils enverront un signal de sortie puis mourront. Ce signal de sortie doit être lu par le processus parent. Le processus parent doit ensuite appeler la commande wait pour lire l'état de sortie du processus enfant et supprimer le processus enfant de la table des processus.

Si le processus parent lit correctement le signal de sortie du processus enfant, le processus enfant sera supprimé de la table des processus.

Mais si le processus parent ne parvient pas à lire le signal de sortie du processus enfant, bien que le processus enfant ait terminé son exécution et soit dans un état mort, il ne sera pas supprimé de la table des processus.

Les processus zombies sont-ils nocifs pour le système ?

Pas question. Étant donné que les processus zombies ne font rien, n'utilisent aucune ressource et n'affectent pas les autres processus, l'existence de processus zombies ne pose aucun problème. Cependant, étant donné que l'état de sortie et d'autres informations de processus dans la table des processus sont également stockés en mémoire, la présence d'un trop grand nombre de processus zombies peut parfois poser problème.

Vous pouvez l'imaginer comme ceci :

"Vous êtes propriétaire d'une entreprise de construction. Vous payez les travailleurs chaque jour en fonction de leur charge de travail. Il y a un ouvrier qui vient sur le chantier tous les jours et reste assis là. Vous n'êtes pas obligé de payer, et il ne le fait pas. Je ne fais aucun travail. Il le fait tous les jours. Viens t'asseoir là, c'est tout !

Ce travailleur est un exemple vivant d’un processus zombie.

Mais, si vous avez beaucoup de travailleurs zombies, votre chantier de construction sera encombré, ce qui rendra difficile le travail des travailleurs normaux.

Alors, comment trouver les processus zombies ?
Ouvrez le terminal et entrez la commande suivante :


ps aux | grep Z

Les détails de tous les processus zombies dans le tableau des processus seront répertoriés.

Comment tuer les processus zombies ?
Dans des circonstances normales, nous pouvons utiliser

SIGKILL signal pour tuer le processus, mais le processus zombie est déjà mort et vous ne pouvez pas tuer quelque chose qui est déjà mort. La commande que vous devez saisir devrait donc être

kill -s SIGCHLD pid

Remplacez le pid ici par l'identifiant du processus parent, afin que le processus parent supprime tous les processus enfants terminés et morts.

Vous pouvez y penser comme :

"Vous trouvez un corps au milieu de la route, vous contactez donc la famille du défunt, qui éloignera ensuite le corps de la route."

Cependant, de nombreux programmes ne sont pas très bien écrits et ne peuvent pas supprimer ces enfants zombies (sinon vous ne verrez pas ces zombies en premier lieu). Par conséquent, la seule façon de garantir que les enfants zombies sont supprimés est de tuer leur processus parent.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer