Qu'est-ce qu'un processus disparu, et pourquoi n'est-il pas tué?

134

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é:

Qu'est-ce que <defunct> pour un processus et pourquoi il ne se tue pas?

    
posée Eduard Florinescu 15.10.2012 - 13:27
la source

2 réponses

124

Dans 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éterminez le processus parent de ce processus et supprimez-le. Pour savoir cela, 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>

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

    
réponse donnée Paddington 15.10.2012 - 13:47
la source
44

La page de manuel ps (1) indique :

  

Les processus marqués <defunct> sont des processus morts (appelés "zombies" )   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   sort.

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 à 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 utilisé par son parent (en appelant wait(2) ). Si le parent d'origine ne l'a pas récupéré avant sa propre sortie, le processus init ( 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   pour terminer.

    
réponse donnée jfs 27.02.2014 - 21:53
la source

Lire d'autres questions sur les étiquettes