Estou usando o tomcat e, às vezes, quando digo para parar, não mata o processo corretamente.
Minha maneira de contornar isso também é fazer:
lsof -i tcp:8080
quais saídas:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 888 root 35u IPv6 780659 0t0 TCP *:http-alt (LISTEN)
java 888 root 39r IPv6 790103 0t0 TCP localhost:58916->localhost:http-alt (CLOSE_WAIT)
java 888 root 40r IPv6 792585 0t0 TCP localhost:58936->localhost:http-alt (CLOSE_WAIT)
java 888 root 75r IPv6 785553 0t0 TCP localhost:58701->localhost:http-alt (CLOSE_WAIT)
java 888 root 77r IPv6 787642 0t0 TCP localhost:58814->localhost:http-alt (CLOSE_WAIT)
java 888 root 130u IPv6 783894 0t0 TCP localhost:58686->localhost:http-alt (CLOSE_WAIT)
java 888 root 353u IPv6 780929 0t0 TCP localhost:58632->localhost:http-alt (CLOSE_WAIT)
Então eu corro
kill -9 pid
Eu quero uma maneira de obter todos os números pid e matá-los. O problema é que não sei como isolar esse campo.
tomcat
aberto processo, você pode usarkillall -9 tomcat
Respostas:
Existe uma
-t
opção (concisa) emlsof
, que parece fazer exatamente o que você está procurando, ou sejaVejo
man lsof
Supondo que você tenha as permissões necessárias, você pode passar o resultado para
kill
uma lista de PIDs com substituição de comando:fonte
Não se esqueça da
--no-run-if-empty
opção de matar :)Dessa forma, o kill só será executado, há um processo de escuta, não é necessário fazer a verificação você mesmo.
fonte
lsof -i tcp:8080
produz a saída, depois| egrep -v "COMMAND PID USER"
solta a linha do cabeçalho, depois| awk '{print $2}'
imprime o 2º campo,| sort -n
prepara os números| uniq
, que emitem apenas cada PID único uma vez. Juntar tudo dá:Mas,
pkill -KILL tomcat
oukillall -KILL tomcat
é mais fácil.fonte
O único liner da @waltinator é ótimo.
Vou adicionar um pouco mais de sabor a ele:
OU
fonte
Este é o script que eu vim com um pouco de verificação de erro.
fonte
Aqui está uma função simples de casca de peixe
basta colocar este otário em um arquivo neste local
~/.config/fish/functions/kill-port.fish
e pronto. Você pode chamá-lo comokill-port 8000
fonte