Comment tuer un processus zombie sous Linux


  • FrançaisFrançais


  • Joyeux Halloween Open SOURCE-rers !

    Voici une histoire aussi vieille que époque temps. Depuis qu’il y a eu C et Unix, et (plus tard) Linux, nous avons eu des morts-vivants. Plus précisément, il existe des processus qui sont marqués comme un processus zombie. Incompris par certains, ignoré par d’autres, et immunisé contre les efforts de tant d’entre nous essayant de kill ces processus sans grand succès. Pourquoi donc?

    Qu’est-ce qu’un processus sous Linux ?

    Tout commence lorsqu’un programme sous Linux est exécuté, et lorsqu’il le fait, son instance en cours d’exécution est appelée un processus. Vous pouvez voir tous les processus de votre environnement Linux avec le ps commander.

    $ ps -ax
            PID TTY         STAT   TIME COMMAND
            1 ?     Ss      0:01 /usr/lib/systemd/systemd rhgb --switched-root --sys
            2 ?     S       0:00 [kthreadd]
            3 ?     I<      0:00 [rcu_gp]
            4 ?     I<      0:00 [rcu_par_gp]

    Parfois, un processus démarre un autre processus, faisant du premier processus le parent du second. Les pstree command est un excellent outil qui vous permet de voir la “généalogie” des processus sur votre système.

    $ pstree -psn
    systemd(1)─┬─systemd-journal(952)
            ├─systemd-udevd(963)
            ├─systemd-oomd(1137)
            ├─systemd-resolve(1138)
            ├─systemd-userdbd(1139)─┬─systemd-userwor(12707)
            │                     ├─systemd-userwor(12714)
            │                     └─systemd-userwor(12715)
            ├─auditd(1140)───{auditd}(1141)
            ├─dbus-broker-lau(1164)───dbus-broker(1165)
            ├─avahi-daemon(1166)───avahi-daemon(1196)
            ├─bluetoothd(1167)

    Chaque processus se voit attribuer un numéro dans le système. L’ID de processus numéro 1 est attribué au tout premier processus exécuté pendant le processus de démarrage, et chaque processus suivant après le PID 1 en est un descendant. Le processus PID 1 est le init, qui sur la plupart des versions plus récentes de Linux n’est qu’un lien symbolique vers le systemd programme.

    Terminer un processus avec la commande kill

    Vous pouvez terminer des processus dans un système Linux avec le kill commander. Malgré le nom, le kill commande et un ensemble d’autres tels que pkill et killall a été écrit/conçu pour envoyer des SIGNAUX à un ou plusieurs processus. Lorsqu’il n’est pas spécifié, le SIGNAL par défaut qu’il envoie est le signal SIGTERM pour terminer le processus.

    Lorsqu’un processus parent meurt ou est tué et que son processus enfant ne suit pas la disparition de son parent, nous appelons ce processus un processus orphelin.

    Comment tuer un processus zombie

    Les processus zombies, en revanche, ne peuvent pas être tués ! Pourquoi pourriez-vous demander? Eh bien, parce qu’ils sont déjà morts !

    Chaque processus enfant, lorsqu’il est terminé, devient un processus zombie puis supprimé par le parent. Lorsque le processus quitte son existence et libère les ressources qu’il avait utilisées, son nom figure toujours dans la table de processus du système d’exploitation. C’est ensuite au travail de processus du parent de supprimer son nom de la table de processus. Lorsque cela échoue, nous avons le processus zombie, qui n’est plus vraiment un processus, mais juste une entrée dans la table de processus du système d’exploitation.

    C’est pourquoi essayer de faire un kill commande même avec le -9 L’option (SIGKILL) sur un processus défunt (zombie) ne fonctionne pas, car il n’y a rien à tuer.

    Ainsi, pour tuer un processus zombie, comme pour supprimer son nom de la liste des processus (la table des processus), vous devez tuer son parent. Par exemple, si le PID 5878 est un processus zombie et que son parent est le PID 4809, alors pour tuer le zombie (5878), vous terminez le parent (4809) :

    $ sudo kill -9 4809  #4809 is the parent, not the zombie

    Mon dernier mot d’avertissement sur les zombies. Soyez très prudent lorsque vous tuez des processus parents. Si le parent d’un processus est le PID 1 et que vous le tuez, vous vous redémarrerez !

    Et ce sera une histoire encore plus effrayante à raconter !

    Source

    La Rédaction

    L'équipe rédactionnnelle du site

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code