Usando o Putty na minha máquina Vista, entrei no meu servidor de desenvolvimento (Ubuntu) e iniciei o servidor Django Test. Ele executa um servidor semelhante ao Apache para testar meu aplicativo da web. O aplicativo é executado no meu endereço IP interno, na porta 8080. Posso abri-lo via navegador da web e navegar até 192.168.0.130:8080
.
Deixei meu computador por um tempo (fisicamente) e voltei para descobrir que a conexão do Putty havia expirado. Não é nada demais, acabei de entrar novamente no servidor. No entanto, quando tento executar o servidor de teste do Django agora, ele diz que a porta já está em uso. Isso significa (eu acho) que a primeira instância do servidor de teste ainda está em execução na porta 8080.
Como faço para matar esse processo? Como é o processo? Eu fiz um ps aux
e tenho a sensação de que este é o processo ofensivo:
garfonzo 5719 0.3 0.0 0 0 ? D 08:58 1:07 [python]
Desde que iniciei o servidor esta manhã naquela hora e o Django é baseado em python. No entanto, fazer nada kill 5719
não faz nada - o processo não é encerrado e ainda não consigo iniciar o servidor de teste.
Alguma ideia!?
EDITAR-- para mais detalhes:
Eu também executei netstat -tulpn
e a saída é esta:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.130:8080 0.0.0.0:* LISTEN -
Não é tão conveniente, a única porta da qual quero saber o ID do processo não tem PID!
Responder1
Se você está bastante confiante de que este é o processo correto (o que parece provável) - e como o netstat não está lhe dizendo nada de útil, você pode usar
kill -9 5719
A opção -9 envia um SIGKILL em vez do sinal SIGTERM padrão, que interromperá o processo se for possível interrompê-lo.
O sinal SIGTERM é enviado ao processo e efetivamente solicita seu desligamento. Um processo pode optar por capturar o SIGTERM e fazer algo totalmente diferente.
O sinal SIGKILL, por outro lado, não vai para o processo e, portanto, não pode ser ignorado. O kernel encerra o processo imediatamente e, portanto, deve ser usado apenas como último recurso, pois não fornece ao processo a oportunidade de limpeza.
Se o processo estiver com E/S bloqueada, talvez não seja possível interrompê-lo com SIGKILL; nesse caso, é um processo zumbi e pode ser necessária uma reinicialização para limpá-lo.
Elaboração: Um processo não pode ser eliminado se estiver aguardando E/S, pois isso deixaria um retorno de chamada pendente para a função do kernel que realiza essa E/S.
Ou, se o pai do processo não chamar wait
, o processo permanecerá como um processo zumbi. Um bom resumo dos processos mortos está localizado emhttp://www.linuxsa.org.au/tips/zombies.html.
Quais são esses processos zumbis que aparecem no ps? Eu os mato, mas eles não vão embora!
Zumbis são processos mortos. Você não pode matar os mortos. Todos os processos eventualmente morrem e, quando isso acontece, tornam-se zumbis. Eles quase não consomem recursos, o que era de se esperar porque estão mortos! A razão para os zumbis é para que o pai (processo) do zumbi possa recuperar o status de saída do zumbi e as estatísticas de uso de recursos. O pai sinaliza ao sistema operacional que ele não precisa mais do zumbi usando uma das chamadas de sistema wait().
Quando um processo morre, todos os seus processos filhos se tornam filhos do processo número 1, que é o processo init. O Init está “sempre” esperando que as crianças morram, para que elas não permaneçam como zumbis.
Se você tiver processos zumbis, significa que esses zumbis não foram esperados por seus pais (veja o PPID exibido por ps -l). Você tem três opções: Corrigir o processo pai (deixá-lo esperar); mate o pai; ou viver com isso. Lembre-se de que conviver com isso não é tão difícil porque os zumbis ocupam pouco mais que uma linha extra na saída do ps.