Vous êtes sur la page 1sur 19

Zombie


Lorsqu'un processus meurt sous Linux, tout n'est pas immédiatement effacé
de la mémoire - son processus le descripteur reste en mémoire (le
descripteur de processus ne prend qu'une petite quantité de mémoire). Le
statut du processus devient EXIT_ZOMBIE et le parent du processus est
averti que son processus fils est mort avec le signal SIGCHLD. Le
processus parent est alors supposé exécuter l'appel système wait () pour
lire l'état de sortie du processus mort et d'autres informations. Cela permet
au processus parent d'obtenir des informations à partir du processus mort.
Après l'appel de wait (), le processus zombie est complètement effacé de la
mémoire.

Les processus Zombie n'utilisent aucune ressource système. (En fait,
chacun utilise une toute petite quantité de mémoire système pour
stocker son descripteur de processus.) Cependant, chaque processus
zombie conserve son identifiant de processus (PID). Les systèmes
Linux ont un nombre fini d'identifiants de processus - 32767 par défaut
sur les systèmes 32 bits. Si les zombies s'accumulent à un rythme très
rapide - par exemple, si un logiciel serveur mal programmé crée des
processus zombies en charge - l'ensemble des PID disponibles sera
finalement assigné aux processus zombies, empêchant ainsi les autres
processus de se lancer.

Vous ne pouvez pas tuer les processus zombies car vous
pouvez tuer les processus normaux avec le Signal
SIGKILL - les processus zombies sont déjà morts. Gardez
à l'esprit que vous n'avez pas besoin de vous débarrasser
des processus de zombies, sauf si vous avez une grande
quantité sur votre système - quelques zombies sont
inoffensifs. Cependant, il existe plusieurs façons de se
débarrasser des processus de zombies.

L'un des moyens consiste à envoyer le signal
SIGCHLD au processus parent. Ce signal indique
au processus parent d'exécuter l'appel système
wait () et de nettoyer ses enfants zombies.
Envoyez le signal avec la commande kill en
remplaçant pid dans la commande ci-dessous par
le PID du processus parent: kill -s SIGCHLD pid

Cependant, si le processus parent est programmé correctement et
ignore les signaux SIGCHLD, cela n'aidera pas. Vous devrez tuer
ou fermer le processus parent des zombies. Lorsque le processus
qui a créé les zombies se termine, init hérite des processus zombie
et devient leur nouveau parent. (init est le premier processus
démarré sous Linux au démarrage et est assigné à PID 1.) init
exécute périodiquement l'appel système wait () pour nettoyer ses
enfants zombies, donc init fera un peu de travail sur les zombies.
Vous pouvez redémarrer le processus parent après l'avoir fermé.

Si un processus parent continue à créer des
zombies, il doit être corrigé afin qu'il appelle
wait () correctement pour récolter ses enfants
zombies. Déposer un rapport de bogue si un
programme de votre système continue de créer
des zombies.
Chaque fois qu'un processus termine la tâche assignée, son état de processus est défini
comme Zombie ou Z . Chaque processus a un processus parent qui appelle une famille de
fonctions nommée attendre qui attend le changement d'état d'un processus. Par exemple, si
l'état du processus change de en cours d'exécution à Zombie , le attendre la méthode sera
déclenchée.

Le attendre la méthode supprime généralement le bloc de contrôle de processus lié à ce
processus zombie, puis supprime l'entrée de ce processus de la table de processus.


Mais parfois, en raison du mauvais développement d'un programme, le processus parent
n'appelle pas le attendre fonction. Et par conséquent, le système ne supprime pas le PCB
du processus zombie. L'entrée de la table de processus pour ce processus spécifique reste
également intacte.

Vous pouvez lister les informations relatives à
ces processus zombies par piping la
commande ps avec egrep .

Egrep est une extension de la commande grep
sous Linux qui traite tous les modèles comme
une chaîne d'expression régulière étendue.

ps aux | egrep "Z | défunt"

Pour tuer les processus zombies sans arrêter
votre serveur, notez l'ID de processus de tout
processus zombie. Dans la section précédente,
nous pouvons voir que le PID du processus
zombie était 18614. Ensuite, utilisez ce PID
pour trouver l'ID dele processus parent.

ps -o ppid = -p 18614


Vérifiez si l'ID de processus parent existe à l'aide de ps commande.


ps -e | grep 18613

Un zombie dont le ppid = 1 ne doit pas rester
un zombie pour très longtemps car init doivent
récolter assez rapidement.

Maintenant que nous avons confirmé l'existence
du processus parent, il est temps de le tuer.
Passez le -SIGKILL drapeau avec le tuer
commande comme suit:


sudo kill -SIGKILL 18613

Système de fichiers proc

Affichage de fichiers virtuels

En appliquant les commandes cat, more ou less aux
fichiers du répertoire /proc/, les utilisateurs ont
immédiatement accès à un grand nombre d'informations
sur le système. Par exemple, pour afficher le type
d'unité centrale dont dispose l'ordinateur, tapez

Cat /proc/cpuinfo

Système de fichiers proc

Système de fichiers proc

Le noyau de Linux a deux fonctions principales : contrôler l'accès aux périphériques
physiques de l'ordinateur d'une part et programmer à quel moment et de quelle façon
les processus vont interagir avec ces périphériques d'autre part. Le répertoire /proc/
— également appelé le système de fichiers proc — contient une hiérarchie de fichiers
spéciaux qui représentent l'état actuel du noyau ; permettant ainsi aux applications et
aux utilisateurs d'obtenir un aperçu du système du point du vue du noyau.

Le répertoire /proc/ contient de nombreuses informations relatives à la configuration
matérielle du système et aux processus en cours d'exécution. De plus, certains des
fichiers situés dans l'arborescence du répertoire /proc/ peuvent être manipulés par
les utilisateurs ainsi que par les applications afin de transmettre des changements de
configuration au noyau.
Système de fichiers proc
Sous Linux, toutes les données sont stockées en tant que fichiers. La plupart des utilisateurs sont familiers avec
les deux principaux types de fichiers : texte et binaire. Mais le répertoire /proc/ contient un autre type de fichier
nommé fichier virtuel. Telle est la raison pour laquelle on fait souvent référence à /proc/ en tant que système de
fichiers virtuel.

Ces fichiers virtuels ont des qualités uniques. La plupart d'entre eux ont une taille égale à zéro octet ;
pourtant, lorsqu'on les affiche, on constate qu'ils contiennent parfois une grande quantité d'informations. De
plus, la plupart du temps, les paramètres concernant la date et l'heure des fichiers virtuels reflètent la date et
l'heure actuelles, ce qui prouve qu'ils sont constamment mis à jour.

Des fichiers virtuels tels que /proc/interrupts, /proc/meminfo, /proc/mounts et /proc/partitions fournissent un
aperçu du matériel d'un système à un moment donné. D'autres tels que le fichier /proc/filesystems et le
répertoire /proc/sys/ fournissent des informations sur la configuration du système et sur les interfaces.

Dans un souci d'organisation, les fichiers qui contiennent des informations sur un sujet similaire sont groupés
dans des répertoires et sous-répertoires virtuels. Par exemple, /proc/ide/ contient des informations se rapportant
à tous les périphériques IDE. De même, les répertoires de processus contiennent des données concernant tous
les processus en cours d'exécution sur le système.

Vous aimerez peut-être aussi