Réponses:
Oh mon Dieu! Non non Non. N'utilisez pas kill -9.
Cela ne donne pas au processus une chance de proprement:
arrêter les connexions de prise
nettoyer les fichiers temporaires
informer ses enfants qu'il s'en va
réinitialiser ses caractéristiques de terminal et ainsi de suite et ainsi de suite.
Généralement, envoyez 15 et attendez une seconde ou deux, et si cela ne fonctionne pas, envoyez 2, et si cela ne fonctionne pas, envoyez 1. Si cela ne fonctionne pas, ENLEVEZ LE BINAIRE car le programme est mal conçu!
N'utilisez pas kill -9. Ne sortez pas la moissonneuse-batteuse simplement pour ranger le pot de fleurs.
Le processus zombie (en fait, ils sont appelés <defunct>
) n'est pas vraiment un processus. C'est seulement une entrée dans la table de processus, ainsi le processus parent peut faire wait()
appel systémique .
Vous ne devriez pas vous inquiéter pour eux. Ils n'occupent aucune ressource, ils disparaîtront également lorsque leur parent fera appel wait()
à la mort du parent.
Cependant, il existe déjà une réponse acceptée: vous POUVEZ tuer le processus zombie. Attachez avec le débogueur au processus parent et appelez la fonction waitpid. Exemple: - supposons que le parent ait PID = 100, le processus zombie a PID = 200
$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
Un processus zombie ne dispose d'aucune ressource, à l'exception de l'entrée dans l'arbre de processus. Cela se produit lorsqu'un processus est terminé, mais le processus parent ne l'a pas encore exploité (c'est-à-dire wait
édité dessus).
Vous pouvez essayer de forcer le parent à le faire si vous le souhaitez en lui envoyant un SIGCHLD ( kill -20
), mais rien ne garantit que le parent l'honorera.
Vous les verrez souvent pendant de courtes périodes (par exemple, lorsque vous affichez l’arborescence de processus à l’aide de top) - c’est normal; Dans la tranche de temps séparant la fin d'un processus enfant et son interrogation par le parent, le processus enfant apparaîtra sous la forme d'un zombie.
Si vous voyez des processus zombies qui existent continuellement - ce qui n'est pas normal - il n'y a toujours pas lieu de s'inquiéter - encore une fois, aucune ressource n'étant allouée à un processus mort - cela signifie généralement que l'application est mal écrite par des développeurs médiocres.
Le seul moment où vous devriez être concerné par les processus zombies est lorsque vous en voyez beaucoup, par exemple, si la même application de merde mentionnée ci-dessus est placée sous charge.
Je travaille dans de très mauvais développeurs. J'ai donc le privilège de gérer de tels problèmes et d'apprendre toutes sortes de choses inutiles en le faisant. En fait, mon équipe a souvent recours à des scripts shell de merde écrits par des développeurs de merde dans des interviews. Si le candidat peut affirmer que le script est vraiment nul et nous expliquer pourquoi c'est merdique, il a un bon pied dans la porte.
En ce qui concerne le fusil de chasse virtuel ...
$ shoot <pid>
#! / bin / sh victime = `ps -e -o pid, ppid | egrep "^ \ s * $ 1 \ b" | awk '{print $ 2}' ` victime \ _name = `ps -e -o pid, cmd | egrep "^ \ s * $ {victime} \ b" | tête -n 1 | awk '{print $ 2}' ` #kill $ {victime} echo "Killed $ {victim_name}."
Et rappelez-vous: toujours leur tirer dans la tête.
Un processus zombie est un processus qui a fini de s'exécuter, mais qui est toujours répertorié dans la table des processus.
kill -9 [nom de processus parent] la posera avec un parti pris extrême.