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 !