Maneira alternativa de matar um processo zumbi

16

Eu só notei alguns processos zumbis no CentOS 6.8 (Final), tentei matá-los, mas eles ainda estão lá:

[root@host user]# ps -ef | grep git
tomcat     746     1  0 Jul18 ?        00:00:00 git clone https://github.com/angular/bower-angular.git -b v1.3.20 --progress . --depth 1
tomcat     747   746  0 Jul18 ?        00:00:00 [git-remote-http] <defunct>
root     20776 20669  0 09:03 pts/3    00:00:00 grep git
tomcat   29970     1  0 Jul18 ?        00:00:00 git clone https://github.com/components/jqueryui.git -b 1.12.0 --progress . --depth 1
tomcat   29971 29970  0 Jul18 ?        00:00:00 [git-remote-http] <defunct>

[root@host user]# kill 746 747 29970 29971

[root@host user]# ps -ef | grep git
tomcat     746     1  0 Jul18 ?        00:00:00 git clone https://github.com/angular/bower-angular.git -b v1.3.20 --progress . --depth 1
tomcat     747   746  0 Jul18 ?        00:00:00 [git-remote-http] <defunct>
root     21525 20669  0 09:26 pts/3    00:00:00 grep git
tomcat   29970     1  0 Jul18 ?        00:00:00 git clone https://github.com/components/jqueryui.git -b 1.12.0 --progress . --depth 1
tomcat   29971 29970  0 Jul18 ?        00:00:00 [git-remote-http] <defunct>

Como você pode ver, eles estão funcionando por dois meses, e também, se eles não são prejudiciais, eu iria me livrar deles, qualquer forma alternativa de matar um zumbi?

    
por lese 19.09.2016 / 09:30

4 respostas

5

Como mencionado por Heemayl, você não pode realmente matar um zumbi. Já está [un] morto ...

No entanto, o problema que você está enfrentando parece um problema com o comando git clone . Fica preso de alguma forma. Provavelmente expira ou falha de alguma outra forma?

Para eliminá-lo, neste caso, você deseja usar a opção de linha de comando -9 . Isso significa enviar o sinal SIGKILL . Você pode realmente usar -KILL também.

[root@host user]# kill -KILL 746 29970

Para obter uma lista de sinais disponíveis, use a opção de linha de comando list.

[root@host user]# kill -l

Isso mostra os números e os nomes (e você verá que # 9 diz SIGKILL.)

    
por 20.09.2016 / 03:03
37

Você não pode matar um zumbi (processo), já está morto. Ele está apenas aguardando que seu processo pai execute wait(2) e colete seu status de saída. Não será necessário nenhum recurso no sistema além de uma entrada na tabela de processos.

Você pode enviar SIGCHLD a seu pai para que ele saiba que um de seus filhos foi demitido (ou seja, solicite-o para coletar o status de saída do filho). Este sinal pode ser ignorado (o que é o padrão):

kill -CHLD <PPID>

(Substitua <PPID> pelo PID real do pai.)

Ou você pode matar o processo pai para que init (PID 1) herde o processo zumbi e o segure corretamente (é uma das principais tarefas de init herdar órfãos e fazer wait(2) regularmente) . Mas matar o pai não é recomendado. Geralmente, a criação de processos zumbis indica problema / problemas de programação e você deve tentar corrigir ou reportar isso.

    
por 19.09.2016 / 09:44
1

para procurar por processos zumbis:

ps aux | grep -w Z | grep -v grep

ps -eo stat,ppid | grep -w Z

para matar o processo zumbi, os IDs pai precisam ser eliminados, ou seja, PPID:

kill PPID1 PPID2

kill $(ps -eo stat,ppid|grep -w Z|awk '{print $2}'|tr "\n" " ")
    
por 27.02.2017 / 20:19
0

Quando um processo pai morre, todo o processo de zumbi será limpo. Não mate o processo pai apenas para limpar o processo de zumbis. Ele virá novamente quando você executar novamente seu programa. Corrigir o seu programa com a chamada adequada do sistema “wait ()” ou “waitpid ()”.

    
por 28.02.2018 / 06:42

Tags