Le meurtre d'un défunt processus sur un système UNIX
J'ai une défunte processus sur mon système:
abc 22093 19508 0 23:29 pts/4 00:00:00 grep ProcA
abc 31756 1 0 Dec08 ? 00:00:00 [ProcA_my_collect] <defunct>
Comment puis-je tuer le processus ci-dessus, sans un redémarrage de la machine? J'ai essayé avec
kill -9 31756
sudo kill -9 31756
- Le fait que le parent id de processus 1 signifie que tout ce qui a commencé, il est mort. Je ne sais pas pourquoi "init" n'a pas récolté il encore.
- C'est un zombie! Ne vous inquiétez pas, il n'est pas dangereux et ne consomme rien.
- Juste vu que sur reddit: cs.cornell.edu/Courses/cs414/2007sp/tanenbaum.jpg
- Sur solaris, il est preap reap zombie processus, malheureusement pas les enfants de init.
- Loki - zombie processus peut créer des problèmes si elles apparaissent en grand nombre. La cause racine de la zombie processus si grande source de préoccupation.
- NE VOUS INQUIÉTEZ PAS! dans mon cas, cela me bloque totalement de redémarrage de mon programme. J'ai besoin de redémarrer mon ordinateur pour être en mesure de le faire..
- Comment est-ce hors sujet? LOL. De toute façon voir unix.stackexchange.com/questions/5642/...
Vous devez vous connecter pour publier un commentaire.
Vous avez tué le processus, mais les morts ne disparaissent de la table de processus jusqu'à ce que son processus parent effectue une tâche appelée "tirer" (essentiellement l'appel
wait(3)
pour que le processus de lecture de son statut de sortie). Morts des processus qui n'ont pas été moissonné sont appelés "zombie processus."Le parent de l'id de processus vous voir pour 31756 est l'id de processus 1, qui appartient toujours à
init
. Ce processus devrait profiter de ses zombie processus périodiquement, mais si elle ne peut pas, ils resteront des zombies dans le processus de la table jusqu'à ce que vous redémarrez.Avez-vous vérifier pour un enfant de processus qui peuvent avoir besoin d'être tué en premier? Parfois, la confiture est en bas de la ligne...
Essayez
ps -ef --forest
pour voir ce qui pourrait être en dessous (le cas échéant) puis tuer en premier, puis celui que vous connaissez déjà
Si kill -9 ne parvient pas à tuer un processus en cause est presque toujours un pilote ou d'un système d'exploitation de bug.
Le processus init a adopté le procédé, mais il ne peut pas récolter il. C'est-à-dire: lorsque init appels d'attente(2) que le processus n'est pas retourné. Un des principaux objectifs de l'init est de récolter des morts d'enfants orphelins, de sorte que le problème n'est pas que ses parents sont morts avant il a été récolté. Pense: Sinon, qui récolte les résultats d'un nohup avais processus après déconnexion?
Tuer les enfants de la défunte processus est peu probable pour aider, sauf s'ils sont en quelque sorte liés à ce bug, vous voyez.
Vous n'allez probablement pas être capable de tuer si le parent n'a pas à le résoudre. Quelque soit la raison, ces systèmes n'est pas recueillir les zombies processus.
FWIW, je l'ai vu un peu sur le SCO Openserver boxen que j'ai utilisé pour administrer. Lourds usage multi-utilisateurs et de faibles ressources système, mais il ne semble pas de mal quoi que ce soit. Juste ennuyé de moi. 🙂
Le processus de probablement se bloque dans, par exemple, en ignorant les signaux comme SIGNAL, vérifiez auprès de
strace -p <pid>
ce qui se passe ici.