Avec des commandes telles que top
et l'interface graphique basée, System Monitor
je 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?
Réponses:
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:
L'extermination est la technique la plus couramment utilisée; dans ce cas, le processus orphelin est tué.
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.
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
la source
init
appellewait
tous ses processus enfants, qu'il soit zombie, orphelin (adopté) ou biologique (auto-engendré)?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 utilisercat /proc/sys/kernel/threads-max
pour voir combien d'entrées sont autorisées sur votre système).Ils apparaissent uniquement lorsque leur processus parent (processus qui
fork()'ed
les concerne) est actif mais n’a pas encore appelé lawait()
fonction système. Une fois que le parent meurt, les zombies sontwait()'ed
pourinit
et disparaissent.la source
top
`capture d'écran dans cette question semble vous contredire? Là, le zombie semble utiliser 100% de 1 CPU, mais pas de mémoire.Quand un se
child process
termine, son décès est communiqué à son parent afin que celui-ci puisse prendre les mesures appropriées.Un processus
process
qui attend que son parent accepte son code de retour est appelé processus zombie .Ils ont
completed their execution
mais a encore unentry
dans leprocess table
.la source
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.
la source