O que é um processo extinto e por que não é morto?

126

O navegador chrome não respondeu e eu tentei matá-lo, mas em vez de desaparecer o processo tinha <defunct> à direita e não foi morto:

O que é <defunct> para um processo e por que ele não é morto?

    
por Eduard Florinescu 15.10.2012 / 13:27

2 respostas

118

Da sua saída, vemos um "defunto", o que significa que o processo concluiu sua tarefa ou foi corrompido ou morto, mas seus processos filhos ainda estão em execução ou esse processo pai está monitorando seu processo filho. Para matar esse tipo de processo, kill -9 PID não funciona. Você pode tentar matá-los com este comando, mas mostrará isso de novo e de novo.

Determine qual é o processo pai deste processo extinto e mate-o. Para saber isso, execute o 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>

Em seguida, kill -9 637 27872 e, em seguida, verifique se o processo defunto foi removido por ps -ef | grep defunct .

    
por Paddington 15.10.2012 / 13:47
41

Página do manual ps (1) diz :

  

Os processos marcados como <defunct> são processos inativos (os chamados "zumbis" )   que permanecem porque seu pai não os destruiu corretamente.   Esses processos serão destruídos por init(8) se o processo pai   saídas.

Você não pode matá-lo porque já está morto. A única coisa que resta é uma entrada na tabela de processos :

  

Em sistemas operacionais Unix e Unix, um processo zumbi ou   processo defunto é um processo que completou a execução, mas ainda   tem uma entrada na tabela de processos. Esta entrada ainda é necessária para permitir   o processo pai para ler o status de saída de seu filho.

Não há mal em deixar tais processos a menos que haja muitos deles. O zumbi é eventualmente obtido por seu pai (chamando wait(2) ). Se o pai original não colheu antes de sua própria saída, então init process ( pid == 1 ) faz isso em algum momento posterior. Processo de zumbis é apenas:

  

Um processo que foi finalizado e que é excluído quando seu status de saída   foi relatado para outro processo que está esperando por esse processo   para terminar.

    
por jfs 27.02.2014 / 21:53