51 votes

Le meurtre d'un défunt processus sur un système UNIX

J'ai une ancienne 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

41voto

Bill Karwin Points 204877

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 à l' 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.

23voto

curtisk Points 8623

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à

6voto

janm Points 9310

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

0voto

Brian Knoblauch Points 8747

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. :)

0voto

tolazy Points 9

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X