et pourquoi ne le tue-t-il pas?'/> et pourquoi ne le tue-t-il pas?'/> et pourquoi ne le tue-t-il pas?'/> Qu'est-ce qu'un processus <défunt> et pourquoi ne le tue-t-il pas? | leicesterontheweb.com

Question Qu'est-ce qu'un processus et pourquoi ne le tue-t-il pas?


Le navigateur chrome n'était pas réactif 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é:

enter image description here

Quel est <defunct> pour un processus et pourquoi il ne se tue pas?


134
2017-10-15 11:27


origine


La réponse acceptée mentionne que "kill -9 PID ne fonctionne pas ". C'est partiellement vrai: en réalité, NO kill fonctionnera. De plus, -9 devrait être utilisé en dernier recours. 99% du temps, une mise à mort par défaut du processus parent le tuerait ET récolterait tous les enfants Un "kill kill" est un SIGTERM (-15). J'encourage les fans de la -9 (SIGKILL) à lire stackoverflow.com/questions/690415/… - Mike S
stackoverflow.com/questions/356722/… - Aᴍɪʀ


Réponses:


À partir de votre sortie, nous voyons un "défunt", ce qui signifie que le processus a terminé sa tâche ou a été corrompu ou tué, mais ses processus enfants sont toujours en cours d'exécution ou ces processus parents surveillent son processus enfant. Pour tuer ce type de processus, kill -9 PID ne fonctionne pas. Vous pouvez essayer de les tuer avec cette commande, mais cela vous le montrera encore et encore.

Déterminer quel est le processus parent de ce processus et le tuer. Pour le savoir, lancez 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>

alors kill -9 637 27872, puis vérifiez que le processus disparu est parti ps -ef | grep defunct.


124
2017-10-15 11:47



vous ne pouvez pas tuer le processus "défunt". Vous pouvez seulement accélérer la suppression de son entrée dans une table de processus en tuant son parent. - jfs
Et si le ppid est 1 (init)? Supposons que je dois juste attendre? - Luc
pour automatiser la fonction kill, vous pouvez également le faire (vous devrez peut-être modifier les octets que vous coupez dans la sortie): ps -ef | grep defunct | grep -v grep | cut -b8-20 | xargs kill -9 - warren
@ warren Merci Vous pouvez également rendre cela légèrement plus court et (imo) plus simple en ne faisant pas un deuxième grep. Il suffit de changer le premier grep en grep [d]efunct ou similaire et il ne correspondra pas lui-même. - Thor84no
@Warren vous ne pouvez pas tuer un processus - même avec un SIGKILL. De plus, vous utilisez kill -9 sans distinction. Voir stackoverflow.com/questions/690415/…. Si vous voulez tuer des enfants disparus, vous pouvez essayer: parents_of_dead_kids=$(ps -ef | grep [d]efunct | awk '{print $3}' | sort | uniq | egrep -v '^1$'); echo "$parents_of_dead_kids" | xargs kill. Relancez le script après 30 secondes environ, avec le kill -9 si vous le désirez. (Notez que je refuse expressément de tuer Init) - Mike S


La page de manuel ps (1) indique:

Processus marqués <defunct> sont des processus morts (soi-disant "des morts-vivants")   qui restent parce que leur parent ne les a pas détruits correctement.   Ces processus seront détruits par init(8) si le processus parent   sorties.

Vous ne pouvez pas le tuer car il est déjà mort. La seule chose qui reste est une entrée dans la table de processus:

Sur les systèmes d’exploitation Unix et Unix, un processus zombie ou   processus disparu est un processus qui a terminé l'exécution, mais toujours   a une entrée dans la table de processus. Cette entrée est toujours nécessaire pour permettre   le processus parent pour lire le statut de sortie de son enfant.

Il n'y a pas de mal à laisser de tels processus à moins qu'il y en ait beaucoup. Zombie est finalement récolté 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 plus tard. Processus Zombie est juste:

Un processus qui s'est terminé et qui est supprimé lorsque son statut de sortie   a été signalé à un autre processus qui attend ce processus   Terminer.


44
2018-02-27 20:53