Maison >Tutoriel système >Linux >Comment gérer les processus zombies ?
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 ».
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.
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.
ps aux | grep Z
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
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!