web-dev-qa-db-fra.com

Que sont les processus zombies?

Avec des commandes comme top et le System Monitor basé sur une interface graphique, je peux voir qu’à l’heure actuelle, 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?

135
Jesper

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 des processus informatiques 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.

Orphans gaspille des ressources de serveur et peut potentiellement laisser un serveur en difficulté (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 Orphan:

  1. L'extermination est la technique la plus couramment utilisée; dans ce cas, le processus Orphan 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 processus parent le processus "init", il est toujours appelé processus orphelin puisque 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#ixzz1PCN9voj

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

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

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

Tuer un processus en cours sur une machine Ubuntu à distance d'une machine Windows en résea

159
Luis Alvarado

Les processus zombies (également affichés sous la forme <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-max pour voir le nombre d'entrées autorisées sur votre système).

Ils apparaissent uniquement lorsque leur processus parent (c'est-à-dire celui avec lequel fork()'ed leur a été attribué) est actif mais n'a pas encore appelé la fonction système wait(). Une fois le parent décédé, les zombies sont wait()'ed pour par init et disparaissent.

20
vartec

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

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

Ils ont completed their execution mais ont toujours un entry dans le process table.

7
Prateek Joshi

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 wait pour obtenir son code de sortie ou son entrée dans la table des processus reste pour toujours et devient un zombie.

1
Ijaz Ahmad Khan