Dois-je tuer le processus zombie dans mon système?

20

Comme je suis novice dans les systèmes Linux / Unix et que je viens de lire sur les processus zombies , j'ai une question. J'en ai 10 en ce moment. Dois-je les tuer et si oui, pourquoi? Sont-ils une charge pour mon système?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped
Jason Paddle
la source
25
Pas besoin de les tuer. Ils sont déjà morts.
Marco
2
Donc, ils ne chargent plus mon système. Et ils resteront comme ça jusqu'à ce que je redémarre le système ou que je les tue, non?
Jason Paddle
7
@Marco: Vous ne pouvez pas tuer ce qui est déjà mort. Mais tu peux tuer ses parents, harrharr!
wullxz
7
Le problème est que leurs parents ne les ont pas récoltés (à leur mort).
ypercubeᵀᴹ
3
10 zombies ??? Vous êtes infesté! Exécutez Jason courir.
Luc M

Réponses:

29

Vous ne pouvez pas tuer un zombie, il est déjà mort.

Les ressources de ce processus sont gratuites et disponibles pour d'autres processus. Ce qui reste est une entrée dans la table de processus. Cela n'a aucune influence sur les performances, ne vous inquiétez pas.

Marco
la source
Oui, cela a du sens. Je peux tuer le processus parent. Merci pour l'info. Je voulais juste savoir s'ils chargent ou pas de système.
Jason Paddle
Je crois cependant qu'il y a une limite de zombies. Je pense que c'est 1024, donc cela ne nuira pas aux performances, mais je pense qu'il y a un plafond sur le nombre que vous pouvez avoir.
ProfessionalAmateur
@ProfessionalAmateur Que se passe-t-il si vous atteignez la limite de zombies (1024 ou autre)?
Roddy des Frozen Peas
@RoddyoftheFrozenPeas - Pour être honnête, je ne suis pas sûr, je les ai toujours nettoyés avant d'arriver à ce point. J'imagine que le système va essayer de créer un autre zombie et peut-être avoir une violation de mémoire ou une autre erreur matérielle, un dépassement de capacité ou une erreur de segmentation quelconque.
ProfessionalAmateur
2
@ProfessionalAmateur: Il n'y a pas de limite zombie sous Linux. Les PID des zombies sont soumis /proc/sys/kernel/pid_max, comme tous les autres PID.
rsaw
16

Quels sont ces processus zombies qui apparaissent en ps? Je les tue mais ils ne s'en vont pas!

Les zombies sont des processus morts. Vous ne pouvez pas tuer les morts. Tous les processus finissent par mourir, et quand ils le font, ils deviennent des zombies. Ils ne consomment presque pas de ressources, ce qui est normal car ils sont morts! La raison des zombies est que le parent (processus) du zombie peut récupérer l'état de sortie du zombie et les statistiques d'utilisation des ressources. Le parent signale au système d'exploitation qu'il n'a plus besoin du zombie en utilisant l'un des appels système wait ().

Lorsqu'un processus meurt, ses processus enfants deviennent tous des enfants du processus numéro 1, qui est le processus init. Init attend toujours la mort des enfants, afin qu'ils ne restent pas des zombies.

Si vous avez des processus zombies, cela signifie que ces zombies n'ont pas été attendus par leur parent (regardez PPID affiché par ps -l). Vous avez trois choix: Fixez le processus parent (faites-le attendre); tuer le parent; ou vivre avec. N'oubliez pas que vivre avec n'est pas si difficile car les zombies occupent un peu plus d'une ligne supplémentaire dans la sortie de ps.

Source: http://www.linuxsa.org.au/tips/zombies.html

Et au cas où vous seriez en train de tuer, ce fil de superutilisateur pourrait vous intéresser: comment trouvez-vous le processus parent d'un processus zombie?

wullxz
la source
Notez que réparer le parent peut être exagéré - peut-être que ce n'est pas encore au point d'attendre ses enfants. Peut-être que ça le fera plus tard (ou oui, peut-être pas).
Romain
Oui tu as raison. La réponse à la question que j'ai liée vous indique comment déterminer le processus parent. Vous avez donc toujours la possibilité de vérifier quels processus créent les zombies et de décider s'il est nécessaire de le faire fonctionner.
wullxz
7

Vous n'avez pas besoin de les tuer.

Pour acquérir une compréhension de base:

Chaque processus est l'enfant d'un processus parent (à l'exception du processus init, mais nous n'avons pas à nous en préoccuper).

Lorsqu'un processus enfant termine son exécution, il peut toujours contenir des données auxquelles le processus parent souhaite accéder, généralement un code de sortie qui décrit le résultat du processus enfant (A-t-il réussi? A-t-il fait une erreur? Quel était le code d'erreur?).

Un processus enfant terminé traîne dans la table de processus en tant que processus zombie jusqu'à ce que le processus parent "réagisse" ou attend le processus enfant, qui est simplement le processus parent indiquant au système d'exploitation qu'il n'a plus besoin de ce processus enfant; Il a lu toutes les valeurs de retour souhaitées et en a fini avec lui. À ce stade, le système nettoiera l'entrée dans la table de processus.

Dark Android
la source
3

Ce processus n'a pas besoin d'être tué.

Juste au cas où vous voudriez le tuer de toute façon (pour une raison quelconque), assurez-vous de tirer sur la tête, voici une commande utile:

kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`

Depuis https://www.erianna.com/kill-a-linux-zombie-process

Datageek
la source
1
+1 pour shoot at the head.
BenjiWiebe