Eu costumo fazer, por exemplo
sudo netstat -lpn |grep :8088
ver a saída
tcp6 0 0 :::8088 :::* LISTEN 11189/java
e depois
sudo kill -kill 11189
Eu gostaria de ter um comando mais conveniente, exatamente como killatport 8088
esse, que use o número da porta tcp como variável e que eu possa criar um alias para um pipeline que faça o que eu quero, mas como obtenho o PID da saída e do pipe ao comando kill? Suponho que posso usar o awk para obter o PID da saída do netstat, mas como faço para proteger e fazer uma correspondência exata de porta para que a entrada 80 não corresponda a 8080 e da mesma forma? Devo torná-lo um programa C? Ou já existe um pequeno utilitário como este?
bash
scripts
command-line
kill
Niklas
fonte
fonte
mvn jetty:stop
poderia falhar se a instância o tiverOutOfMemoryError
. Quando eu reinicio os servlets java, acontece que a porta não está disponível mesmo em uma parada regular, comomvn jetty:stop
. Às vezes, o processo pode obterOutOfMemoryError
e não liberará a porta TCP em um desligamento regular, comomvn jetty:stop
.mvn jetty:stop
não é o mesmo que enviar o SIGTERM, e a jvm ainda deve poder processar o SIGTERM, mesmo que seus aplicativos estejam sem memória.Respostas:
O fusor pode fazer isso:
fonte
Um comando pode ser formulado assim:
Explicação:
netstat -ltpn
l
) no TCP (t
) e seus programas (p
) sem resolver os números de porta nos nomes (n
).grep ":1234\b"
:1234
seguido por um limite (\b
), indicando o final da palavra (ou número, no nosso caso). Isso garante que não capturamos,:12345
por exemplo.awk '{sub(/\/.*/, "", $NF); print $NF}'
este
sub(/regex/,"replacewith", #fieldnumber)
\/.*
""
$NF
, o que significa o último campo (ou seja, o campo que contémPID/program
)print $NF
.O regex
\/.*
corresponde a um literal/
e tudo depois dele, e então o substituímos por nada, essencialmente o excluindo; portanto, resta apenas o número PID nesse campo.xargs -i kill -kill {}
xargs -i
é um programa que permite que a saída do comando anterior atue como entrada para outro comando. Nosso comando ékill -kill {}
onde{}
indica "a saída do comando anterior no pipeline", que é o nosso número PID.Nota: todo esse comando pode ser um pouco perigoso, porque você pode matar acidentalmente algo que não queria. Poderia usar com um pouco mais de higienização. Apenas certifique-se de obter o número da porta correto ao usá-lo.
Se você quiser transformar isso em uma função, adicione o seguinte ao seu
~/.bashrc
:Salve e aplique as alterações usando
source ~/.bashrc
. Agora, você pode usar a função assim:fonte