web-dev-qa-db-fra.com

Tuer un processus défunt sur le système UNIX

J'ai un processus disparu 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 redémarrage de la machine? J'ai essayé avec

kill -9 31756
Sudo kill -9 31756
49
gagneet

Vous avez tué le processus, mais un processus mort ne disparaît pas de la table de processus jusqu'à ce que son processus parent exécute une tâche appelée "récolte" (appelant essentiellement wait(3) pour que ce processus lise son état de sortie). Les processus morts qui n'ont pas été récoltés sont appelés " processus zombies ".

L'ID de processus parent que vous voyez pour 31756 est l'ID de processus 1, qui appartient toujours à init. Ce processus devrait récolter ses processus zombies périodiquement, mais s'il ne le peut pas, ils resteront des zombies dans la table de processus jusqu'à ce que vous redémarriez.

41
Bill Karwin

Avez-vous vérifié un processus enfant qui pourrait devoir être tué en premier? Parfois, le bourrage est en baisse ... Essayez ps -ef --forest

pour voir ce qui peut être en dessous (le cas échéant), puis tuez-le d'abord, puis celui que vous connaissez déjà

23
curtisk

Si kill -9 ne parvient pas à tuer un processus, la cause est presque toujours un bug de pilote ou de système d'exploitation.

Le processus init a adopté le processus, mais il ne peut pas le récolter. C'est-à-dire: lorsque les appels init attendent (2) ce processus n'est pas retourné. L'un des principaux objectifs de l'init est de récolter les enfants orphelins morts, donc le problème n'est pas que son parent soit mort avant d'être récolté. Pensez: Sinon, qui obtient les résultats d'un processus Nohup'd après la déconnexion?

Il est peu probable que tuer des enfants du processus défunt aide, à moins qu'ils ne soient en quelque sorte liés au bug particulier que vous voyez.

6
janm

Le processus se bloque probablement par exemple en ignorant les signaux comme SIGPIPE, vérifiez avec strace -p <pid> Que se passe-t-il ici.

0
tolazy

Vous ne pourrez probablement pas le faire si tuer le parent ne le résout pas. Pour une raison quelconque, les systèmes ne collectent pas ce processus zombie.

FWIW, je l'ai vu un peu sur la boîte SCO Openserver que j'avais l'habitude d'administrer. Utilisation multi-utilisateurs intensive et ressources système faibles, mais cela ne semblait pas faire de mal. Ça m'a ennuyé. :)

0
Brian Knoblauch