Le navigateur chrome ne répondait pas et j'ai essayé de le tuer, mais au lieu de disparaître le processus avait <defunct>
à sa droite, et n'a pas été tué :
Qu'est-ce que <defunct>
pour un processus et pourquoi il n'est pas tué ?
Le navigateur chrome ne répondait pas et j'ai essayé de le tuer, mais au lieu de disparaître le processus avait <defunct>
à sa droite, et n'a pas été tué :
Qu'est-ce que <defunct>
pour un processus et pourquoi il n'est pas tué ?
D'après votre sortie, nous voyons un "defunct", ce qui signifie que le processus a soit terminé sa tâche, soit a été corrompu ou tué, mais ses processus enfants sont toujours en cours d'exécution ou ces processus parents surveillent leurs processus enfants. Pour tuer ce type de processus, kill -9 PID ne fonctionne pas. Vous pouvez essayer de les tuer avec cette commande mais elle affichera ce message encore et encore.
Déterminer quel est le processus parent de ce processus défunt et le tuer. Pour le savoir, exécutez la commande :
$ ps -ef | grep defunct
UID PID PPID C STIME TTY TIME CMD
1000 637 27872 0 Oct12 ? 00:00:04 [chrome] <defunct>
1000 1808 1777 0 Oct04 ? 00:00:00 [zeitgeist-datah] <defunct>
Puis kill -9 637 27872
puis vérifiez que le processus défunt a disparu par ps -ef | grep defunct
.
La page ps(1) du manuel indique :
Procédés marqués
<defunct>
sont des processus morts (appelés "zombies" ) qui restent parce que leur parent ne les a pas détruits correctement. Ces processus seront détruits parinit(8)
si le processus parent parent sort.
Vous ne pouvez pas le tuer car il est déjà mort. La seule chose qui reste est une entrée dans la table des processus :
Sur les systèmes d'exploitation informatiques Unix et similaires à Unix, un processus zombie ou processus défunt est un processus qui a terminé son exécution mais qui a toujours mais qui a toujours une entrée dans la table des processus. Cette entrée est toujours nécessaire pour permettre à au processus parent de lire l'état de sortie de son enfant.
Il n'y a aucun mal à laisser de tels processus se dérouler, sauf s'ils sont nombreux. Zombie est finalement récupéré par son parent (en appelant wait(2)
). Si le parent d'origine ne l'a pas récolté avant sa propre sortie alors init
processus ( pid == 1
) le fait à un moment ultérieur. Le processus des zombies est juste :
Un processus qui s'est terminé et qui est supprimé lorsque son état de sortie a été signalé à un autre processus qui attend la fin de ce processus. se termine.
En développant la réponse de Paddington
D'après vos résultats, nous voyons un défunt ce qui signifie que enfant a soit terminé sa tâche, soit a été corrompu ou tué. Son processus parent est toujours en cours d'exécution et n'a pas remarqué son enfant mort.
kill -9 PID
ne fonctionnera pas (déjà mort).
Pour déterminer le parent de ce processus enfant, exécutez cette commande :
ps -ef | grep defunct
UID PID **PPID** C STIME TTY TIME CMD
1000 637 27872 0 Oct12 ? 00:00:04 [chrome] <defunct>
Voyez qui est le parent : ps ax | grep 27872
Si vous voulez, vous pouvez tuer le parent, et le défunt disparaîtra. kill -9 27872
voir la réponse de Jfs pour un raisonnement plus technique.
Je crée accidentellement <defunct>
par
La solution est d'essayer la commande fg
dans chaque fenêtre de terminal ouverte. Puis les processus défunts disparaissent.
En complément de la réponse de @Paddington, j'ai ajouté cette fonction à mon bashrc pour une vérification rapide :
defunct(){
echo "Children:"
ps -ef | head -n1
ps -ef | grep defunct
echo "------------------------------"
echo "Parents:"
ppids="$(ps -ef | grep defunct | awk '{ print $3 }')"
echo "$ppids" | while read ppid; do
ps -A | grep "$ppid"
done
}
Ça donne quelque chose comme :
Children:
UID PID PPID C STIME TTY TIME CMD
user 25707 25697 0 Feb26 pts/0 00:00:00 \[sh\]
user 30381 29915 0 11:46 pts/7 00:00:00 grep defunct
------------------------------
Parents:
25697 pts/0 00:00:00 npm
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.