GNU/Linux >> Tutoriels Linux >  >> Linux

Comment tuer un processus zombie sous Linux

Happy Halloween Open SOURCE-rers !

Voici un conte aussi vieux que l'époque temps. Depuis qu'il y a eu C et Unix, et (plus tard) Linux, nous avons eu des zombies . Plus précisément, certains processus sont marqués comme 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 est-ce ?

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 ps commande.

$ 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. Le pstree 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. Le numéro d'identification de processus 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 init , qui sur la plupart des nouvelles versions de Linux n'est qu'un lien symbolique vers le systemd programme.

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Terminer un processus avec la commande kill

Vous pouvez terminer des processus dans un système Linux avec le kill   commande. Malgré son 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 est toujours sur la table des processus du système d'exploitation. C'est alors au travail de processus 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 sur la table des 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 mettez fin au 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 redémarrez vous-même !

Et ce sera une histoire encore plus effrayante à raconter !


Linux
  1. Comment trouver et tuer le processus Zombie sous Linux

  2. Comment installer vtop sur Linux

  3. Comment tuer un processus exécuté sur un port spécifique sous Linux ?

  4. Comment tuer le processus zombie

  5. Comment mettre en pause/reprendre un processus sous Linux

Comment tuer les processus Zombie sous Linux

Comment tuer les processus zombies dans Ubuntu 20.04 LTS

Comment tuer le processus Linux en cours d'exécution sur un port particulier

Comment tuer un processus sous Linux

Comment tuer ou terminer un processus Linux :Le guide ultime

Comment tuer les processus zombies dans Ubuntu