Qu'est-ce qu'un processus zombie?

127

Avec les commandes telles que top et System Monitor basé sur l'interface graphique, je peux voir que pour le moment j'ai plusieurs processus zombies.

Qu'est-ce qu'un processus zombie?

Affectent-ils les performances du système ou de l'application à laquelle ils sont soumis? Utilisent-ils trop de mémoire ou de mémoire du tout?

    
posée Jesper 14.06.2011 - 00:27
la source

3 réponses

151

Les zombies sont des processus DEAD. Ils ne peuvent pas être «tuer» (vous ne pouvez pas tuer le mort). Tous les processus finissent par mourir et, lorsqu'ils le font, ils deviennent des zombies. Ils ne consomment presque pas de ressources, ce qui est à prévoir car ils sont morts! La raison des zombies est que le parent (processus) du zombie peut 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 est toujours en train d’attendre la mort des enfants pour qu’ils ne restent pas des zombies.

Si vous avez des processus zombies, cela signifie que leur parent n’a pas attendu ces zombies (regardez PPID affiché par ps -l ). Vous avez trois choix: Fixer le processus parent (le faire attendre); tuer le parent; ou vivre avec elle. Rappelez-vous que vivre avec elle n’est pas si difficile, car les zombies ne prennent qu’une ligne supplémentaire dans la sortie de ps.

Les zombies peuvent être identifiés dans la sortie de la commande Unix ps par la présence d'un "Z" dans la colonne STAT. Les zombies qui existent depuis plus qu'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 deviendrait grave sous des charges plus lourdes.

Pour supprimer les zombies d’un système, le signal SIGCHLD peut être envoyé au parent manuellement à l’aide de la commande kill. Si le processus parent refuse toujours de récupérer le zombie, l'étape suivante consisterait à supprimer le processus parent. Lorsqu'un processus perd son parent, init devient son nouveau parent. Init exécute périodiquement l'appel du système d'attente pour récupérer 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 terminé.

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

Les orphelins gaspillent les ressources du serveur et peuvent potentiellement causer des problèmes au serveur (il s’agit de la plus grande différence de ressources entre les zombies et les orphelins (sauf si vous voyez un film orphelin). p>

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

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

  3. L’expiration est une technique où chaque processus se voit accorder un certain temps pour se terminer avant d’être tué. Au besoin, un processus peut demander plus de temps pour terminer avant l'expiration du délai imparti.

Un processus peut également être orphelin 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 le re-parenting et se produit automatiquement. Bien que techniquement le processus ait le processus "init" comme parent, il est toujours appelé un processus orphelin puisque le processus qui l'a créé à l'origine n'existe plus.

Plus d'infos:

lien

lien

lien

Comment identifier et tuer le processus de suspension, 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 depuis une machine Windows qui est sur le réseau LAN

    
réponse donnée Luis Alvarado 14.06.2011 - 00:39
la source
20

Les processus Zombie (également représentés par <defunct> ) ne sont pas du tout des processus réels. 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 aucun processeur ou 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 combien d'entrées sont autorisées sur votre système).

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

    
réponse donnée vartec 14.06.2011 - 11:36
la source
6

Lorsqu'un child process se termine, sa mort est communiquée à son parent afin que le parent puisse prendre des mesures appropriées.

Un process attendant que son parent accepte son code retour est appelé processus zombie .

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

    
réponse donnée Prateek Joshi 14.10.2015 - 18:11
la source

Lire d'autres questions sur les étiquettes