Lexique/Quand quelque chose ne va pas
Processus zombie
Aussi : processus defunct, processus mort
En bref
Un processus zombie est un processus qui a fini de s’exécuter mais figure encore dans la table des processus, parce que son processus parent n’a pas encore récupéré son code de sortie. Il n’utilise pas de processeur et n’occupe presque pas de mémoire.
Quand un processus se termine, le système garde une petite trace pour que le parent puisse savoir comment il s’est arrêté. Normalement, le parent lit cette trace aussitôt et l’entrée disparaît. S’il ne le fait jamais, le processus terminé reste listé comme zombie.
Quelques zombies sont sans danger. Un nombre qui augmente régulièrement révèle un bug dans le programme parent.
Comment trouver les processus zombies sur Mac
Dans le Terminal, lancez ps -axo pid,ppid,stat,comm | awk '$3 ~ /^Z/'. Chaque ligne est un zombie, et la colonne PPID indique le processus parent responsable.
Comment se débarrasser d’un processus zombie
Vous ne pouvez pas tuer un zombie, car il s’est déjà terminé. La solution passe par le parent. Quittez ou relancez l’app parente : le zombie est confié à launchd, qui le fait disparaître.
Ne quittez pas launchd ni d’autres processus système pour éliminer des zombies. Si le parent est un processus système, un redémarrage du Mac les fait disparaître.
Comment trouver le parent d’un zombie
Dans la colonne de commande complète de ps, un zombie apparaît comme <defunct>, car son programme s’est déjà terminé. C’est au parent qu’il faut s’intéresser.
- Lancez
ps -axo pid,ppid,stat,comm | awk '$3 ~ /^Z/'pour lister les zombies. Le Z dans la colonne STAT signale un zombie. - Notez le nombre de la colonne PPID.
- Lancez
ps -p <PPID> -o pid,user,commandpour voir quel programme est le parent. - Dans le Moniteur d’activité, choisissez Présentation > Toutes les opérations, hiérarchiquement pour voir le même arbre parent-enfant.
- Occupez-vous du parent. Si c’est une app que vous avez ouverte, quittez-la et rouvrez-la. Si c’est un shell ou un script dans le Terminal, fermez cette fenêtre ou arrêtez le script. Si c’est un processus système, redémarrez le Mac.
Normal ou inquiétant
Un programme parent récupère le code de sortie d’un enfant avec les appels système de la famille wait. Un programme qui lance des processus enfants sans jamais les attendre laisse des zombies derrière lui. C’est un bug du parent, et seul son développeur peut le corriger pour de bon.
Voir un zombie un instant est normal. Il existe entre le moment où un processus se termine et celui où son parent lit son code de sortie, ce qui est généralement très court.
Cela mérite qu’on s’y intéresse quand le même parent garde beaucoup de zombies, ou quand leur nombre ne cesse de grandir au fil des heures. Pour les compter, lancez ps -axo stat | grep -c '^Z'. Pour voir les limites de processus de votre Mac, lancez sysctl kern.maxproc kern.maxprocperuid.
Processus zombie, orphelin et bloqué : trois choses différentes
Ces trois termes sont souvent confondus, et chacun demande une solution différente.
- Un zombie a fini de s’exécuter. Il ne reste que son entrée dans la table des processus.
- Un orphelin tourne encore, mais son parent s’est terminé. macOS le confie à launchd, le PID 1, qui devient son nouveau parent.
- Un processus bloqué tourne encore mais est coincé, souvent affiché comme ne répondant pas dans le Moniteur d’activité. Contrairement à un zombie, il peut être quitté ou forcé à quitter.
Ce qu’il ne faut pas faire
Les zombies sont sans danger en petit nombre : inutile de prendre des risques pour les faire disparaître.
- Ne lancez pas
kill -9sur le PID du zombie. Il s’est déjà terminé, donc le signal n’a aucun effet. - Ne quittez pas launchd ni d’autres processus système pour éliminer des zombies. Un redémarrage fait la même chose sans risque.
- Ne quittez pas le parent sans vérifier ce que c’est. Si c’est une app avec des documents ouverts, enregistrez d’abord votre travail.
Questions fréquentes
Qu’est-ce qu’un processus zombie sur Mac ?
C’est un processus terminé mais encore listé, parce que son parent n’a pas récupéré son code de sortie. Il n’utilise pas de processeur.
Comment tuer un processus zombie ?
Vous ne pouvez pas le tuer directement. Quittez ou relancez son processus parent, indiqué dans la colonne PPID de ps, et le zombie disparaît.
Les processus zombies sont-ils dangereux ?
Quelques-uns, non. Chacun occupe une place dans la table des processus : un nombre élevé et croissant peut finir par poser problème, et révèle un programme parent bogué.
Pourquoi kill -9 ne supprime-t-il pas un processus zombie ?
Un zombie ne tourne pas : le signal n’a rien à arrêter. Seul son parent, en récupérant son code de sortie ou en se terminant, le fait disparaître.
Redémarrer le Mac supprime-t-il les processus zombies ?
Oui. Un redémarrage met fin à tous les processus, zombies et parents compris.
Les processus zombies sont-ils le signe d’un logiciel malveillant ?
Non. Ils font partie du fonctionnement normal de la fin des processus Unix. Beaucoup de zombies venant d’un même parent signifient généralement que ce programme a un bug.
Voir aussi
Vous venez de Windows ? Consultez Gestionnaire des tâches pour Mac, ou les meilleures alternatives au Moniteur d’activité. Ou parcourez tous les termes du lexique.