Como nas respostas acima, a maneira mais forte de encerrar qualquer processo é SIGKILL
, por exemplo kill -9 process_id
.
No entanto, existem processos que são simplesmente impossíveis de Force Quit
nem kill
. Eles chamaram de zombie
processos.
Aqui está um script curto que criará um zombie
processo por dois minutos:
perl -e 'if($p=fork) {print "unkillable pid:$p\n" ;system("ps -l"); sleep(120)}'
Execute o script acima no Terminal e você obterá a saída, como a seguir:
unkillable pid:50571
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 47380 47379 4006 0 31 0 2448416 2900 - S 0 ttys000 0:00.36 -bash
501 50570 47380 4006 0 31 0 2443512 1424 - S+ 0 ttys000 0:00.01 perl -e if($p=fork) {print "u
#THIS-> 501 50571 50570 2006 0 0 0 0 0 - Z+ 0 ttys000 0:00.00 (perl)
501 12795 12794 4006 0 31 0 2448296 1752 - S+ 0 ttys001 0:00.75 -bash
501 50123 50122 4006 0 31 0 2448296 2688 - S+ 0 ttys002 0:00.14 -bash
Se você verificar a coluna de status quanto ao processo inábil (neste caso: 50571), verá o Z
sinalizador, o que significa zombie
.
Você pode tentar enviar qualquer kill
sinal (por exemplo kill -9 50571
) e o processo ainda existe. De qualquer forma, não prejudica muito o seu sistema, porque na verdade não existe - apenas ocupa a tabela de processos.
No exemplo acima, em 120 segundos, ele será limpo.