Que sont les processus zombies?

138

Avec des commandes telles que topet l'interface graphique basée, System Monitorje peux voir que pour le moment, j'ai plusieurs processus zombies.

Que sont les processus zombies?

Ont-ils une incidence sur les performances du système ou de l'application pour laquelle ils sont zombies? Utilisent-ils trop de mémoire ou aucune mémoire?

Jesper
la source
39
Ce sont des processus qui veulent manger votre cpu;)
Luis Alvarado
8
pour déjeuner ... :)
RolandiXor
3
Ces processus sont morts mais pas enterrés.
Prateek Joshi
2
Manger mon CPU? C'est vraiment terrifiant!
Håvard Geithus

Réponses:

162

Les zombies sont des processus MORT. Ils ne peuvent pas être "tuer" (Vous ne pouvez pas tuer les MORT). Tous les processus finissent par mourir et quand ils le deviennent, 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 du zombie (processus) puisse récupérer le statut 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 que les enfants meurent pour ne pas rester comme des zombies.

Si vous avez des processus zombies, cela signifie que ces parents n'ont pas attendu ces zombies (regardez le PPID affiché par ps -l). Vous avez trois choix: Corrigez le processus parent (faites-le attendre); tuer le parent; ou vivre avec elle. Rappelez-vous que vivre avec cela n’est pas si difficile car les zombies ne prennent guère plus d’une ligne supplémentaire dans la sortie de ps.

Les zombies peuvent être identifiés dans la sortie de la commande ps Unix par la présence d'un "Z" dans la colonne STAT. Les zombies qui existent depuis plus d'une courte période indiquent généralement un bogue dans le programme parent. Comme avec d'autres fuites, la présence de quelques zombies n'est pas inquiétante en soi, mais peut indiquer un problème qui s'aggraverait avec des charges plus lourdes.

Pour supprimer les zombies d'un système, le signal SIGCHLD peut être envoyé manuellement au parent à l'aide de la commande kill. Si le processus parent refuse toujours de récupérer le zombie, l'étape suivante consiste à supprimer le processus parent. Lorsqu'un processus perd son parent, init devient son nouveau parent. Init exécute périodiquement l'appel système en attente pour récupérer tous les zombies avec init en tant que parent.

Il existe également des processus orphelins qui sont un processus informatique dont le processus parent est terminé ou s'est terminé.

Un processus peut devenir orphelin lors de l'appel à distance lorsque le processus client se bloque après avoir envoyé une demande au serveur.

Les orphelins gaspillent des ressources de serveur et peuvent potentiellement causer des problèmes à un serveur (il s'agit de la plus grande différence de ressources entre zombies et orphelins (sauf si vous voyez un film zombie orphelin). Cependant, il existe plusieurs solutions au problème de processus orphelin:

  1. L'extermination est la technique la plus couramment utilisée; dans ce cas, le processus orphelin est tué.

  2. La réincarnation est une technique dans laquelle des machines tentent périodiquement de localiser les parents de calculs à distance. à quel point les processus orphelins sont tués.

  3. L'expiration est une technique dans laquelle chaque processus se voit attribuer un certain temps avant d'être exécuté. Si nécessaire, un processus peut "demander" plus de temps avant la fin du temps imparti.

Un processus peut également être orphelin et s'exécuter sur le même ordinateur que son processus parent. Dans un système d'exploitation de type UNIX, tout processus orphelin sera immédiatement adopté par le processus système spécial "init". Cette opération s'appelle re-parenting et se produit automatiquement. Même si, techniquement, le processus a pour origine le processus "init", il est toujours appelé processus orphelin, car le processus qui l'a créé à l'origine n'existe plus.

Plus d'informations:

http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process#ixzz1PCN9vojU

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

http://www.brighthub.com/computing/linux/articles/79186.aspx

Comment identifier et supprimer le processus suspendu lorsque le système se bloque et réagit lentement à la saisie de l'utilisateur?

Tuer un processus en cours d'exécution sur une machine Ubuntu à distance à partir d'une machine Windows en réseau local

Luis Alvarado
la source
18
Ekhm! Vous POUVEZ tuer les morts! Il suffit de viser la tête. Ou nous ont-ils menti tout le temps?
Marcin Kaminski
1
initappelle waittous ses processus enfants, qu'il soit zombie, orphelin (adopté) ou biologique (auto-engendré)?
Bleeding Fingers
1
acc. camouflage avec la Seconde Guerre mondiale: P
عامان غني
S'il vous plaît donner une médaille à @MarcinKaminski!
Andrea
20

Les processus zombies (également affichés en tant que <defunct>) ne sont pas du tout de vrais processus. Ce ne sont que des entrées dans la table de processus du noyau. C'est la seule ressource qu'ils consomment. Ils ne consomment ni CPU ni RAM. Le seul danger d'avoir des zombies est de manquer d'espace dans la table de processus (vous pouvez utiliser cat /proc/sys/kernel/threads-maxpour voir combien d'entrées sont autorisées sur votre système).

Ils apparaissent uniquement lorsque leur processus parent (processus qui fork()'edles concerne) est actif mais n’a pas encore appelé la wait()fonction système. Une fois que le parent meurt, les zombies sont wait()'edpour initet disparaissent.

vartec
la source
4
La top`capture d'écran dans cette question semble vous contredire? Là, le zombie semble utiliser 100% de 1 CPU, mais pas de mémoire.
Torben Gundtofte-Bruun Le
7

Quand un se child processtermine, son décès est communiqué à son parent afin que celui-ci puisse prendre les mesures appropriées.

Un processusprocess qui attend que son parent accepte son code de retour est appelé processus zombie .

Ils ont completed their executionmais a encore un entrydans le process table.

Prateek Joshi
la source
1

Les processus zombies sont des processus qui ont cessé de fonctionner, mais leur entrée dans la table de processus existe toujours car le processus parent ne l'a pas récupérée via l'appel sys. Techniquement, chaque processus qui se termine est un zombie pour une très courte période de temps, mais peut durer plus longtemps.

Des processus zombies plus longs surviennent lorsque les processus parents n'appellent pas l'appel système après la fin du processus enfant. Cela se produit lorsque le processus parent est mal écrit et omet simplement l'appel en attente ou lorsque le processus parent décède avant que l'enfant et le nouveau processus parent n'appelle pas l'attente. Lorsqu'un parent de processus décède avant l'enfant, le système d'exploitation assigne le processus enfant au processus "init" ou au PID 1. C'est-à-dire que le processus init "adopte" le processus enfant et en devient le parent. Cela signifie que maintenant, lorsque le processus enfant se termine, le nouveau parent (init) doit appeler waitpour obtenir son code de sortie ou son entrée dans la table des processus reste pour toujours et devient un zombie.

Ijaz Ahmad Khan
la source