Script do Linux para matar a escuta do processo em uma porta específica

2

Eu tenho um processo que escuta em uma porta TCP (? 0003). De tempos em tempos, cai - mal. Ele pára de funcionar, mas continua ocupando a porta por algum tempo, então nem posso reiniciá-la. Eu estou olhando para automatizar isso.

O que eu faço agora é:

netstat -ntlp |grep -P "\*\:\d0003"

Para ver o que é o PID e, em seguida:

kill -9 <pid>

Alguém tem um script (ou EXE para esse assunto) que ligaria os dois passos juntos, ou seja. analisar o PID do primeiro comando e passá-lo para o segundo?

    
por EMP 15.03.2010 / 00:57

6 respostas

5

Você também pode fazer isso:

kill -9 $( lsof -i:?0003 -t )
    
por 15.03.2010 / 07:07
5
kill $(netstat -ntpl 2>/dev/null | egrep "^tcp  .*:[0-9]0003"|awk '{print $7}'|cut -d / -f 1 )

Você pode fazer kill -9 em vez de achar que o -9 é obrigatório. Eu redireciono o stderr netstat porque ele omite uma mensagem quando executado como não-raiz, o que não é importante para essa finalidade. Eu incluo o tcp no regex para filtrar o tcp6.

    
por 15.03.2010 / 01:20
3

lá vai você, uma linha para você

netstat -ntlp | awk '$4~/:*0003$/{gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}'
    
por 15.03.2010 / 01:16
1

Assumo que o comando python é apenas o primeiro termo no comando completo, certo? Se você tiver o nome do script sendo executado, poderá ver algo como pgrep -f

Se tiver certeza da exclusividade, também é possível usar o pkill -f

relacionado     
por 15.03.2010 / 01:21
0

Que tal killall <command> há mais de um desses processos?

Se isso não funcionar, tente:

PID='netstat -ntlp |grep -P "\*\:\d0003"'; kill -9 $PID

Isso deve fazer o truque.

    
por 15.03.2010 / 01:02
0

Talvez o comando do fusor com as opções -k e -n possa ajudar. Diga "man fuser" para mais informações.

    
por 15.03.2010 / 02:21