Cos'è un processo defunto e perché non viene ucciso?

134

Il browser Chrome non era reattivo e ho cercato di ucciderlo, ma invece di scomparire il processo aveva <defunct> alla sua destra, e non è stato ucciso:

Che cos'è <defunct> per un processo e perché non viene ucciso?

    
posta Eduard Florinescu 15.10.2012 - 13:27

2 risposte

124

Dal tuo output vediamo un "defunto", il che significa che il processo ha completato il suo compito o è stato danneggiato o ucciso, ma i suoi processi figli sono ancora in esecuzione o il processo padre sta monitorando il suo processo figlio. Per uccidere questo tipo di processo, kill -9 PID non funziona. Puoi provare ad ucciderli con questo comando ma lo mostrerà ancora e ancora.

Determina quale è il processo genitore di questo processo defunto e uccidilo. Per sapere questo eseguire il comando:

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>

Quindi kill -9 637 27872 , quindi verifica che il processo defunto sia passato da ps -ef | grep defunct .

    
risposta data Paddington 15.10.2012 - 13:47
44

Pagina di manuale ps (1) dice :

  

I processi contrassegnati <defunct> sono processi morti (i cosiddetti "zombi" )   che rimangono perché il loro genitore non li ha distrutti correttamente.   Questi processi verranno distrutti da init(8) se il processo padre   uscite.

Non puoi ucciderlo perché è già morto. L'unica cosa rimasta è una voce nella tabella dei processi :

  

Su sistemi operativi per computer Unix e Unix, un processo di zombi o   il processo defunto è un processo che ha completato l'esecuzione ma ancora   ha una voce nella tabella di processo. Questa voce è ancora necessaria per consentire   il processo genitore per leggere lo stato di uscita del suo bambino.

Non c'è nulla di male nel lasciare che tali processi siano meno che non ce ne siano molti. Zombie viene infine raccolto dai suoi genitori (chiamando wait(2) ). Se il genitore originale non lo ha raccolto prima della sua uscita, allora il processo init ( pid == 1 ) lo fa in un secondo momento. Zombie Process è solo:

  

Un processo che è terminato e che viene cancellato quando è in uscita   è stato segnalato a un altro processo che è in attesa di tale processo   per terminare.

    
risposta data jfs 27.02.2014 - 21:53

Leggi altre domande sui tag