fusor pode fazer isso:
sudo fuser -KILL -k -n tcp 8088
Costumo fazer, por exemplo,
sudo netstat -lpn |grep :8088
veja 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
que usa o número da porta tcp como uma variável e que eu posso fazer como um alias para um pipeline que faz o que eu quero, mas como faço para obter o PID da saída e canalizá-lo para o comando kill? Eu suponho que eu possa usar o awk para obter o PID da saída do netstat, mas como proteger e fazer uma correspondência exata da porta para que a entrada 80 não corresponda à 8080 e da mesma forma? Devo fazer um programa em C? Ou já existe um pequeno utilitário como este?
fusor pode fazer isso:
sudo fuser -KILL -k -n tcp 8088
Um comando pode ser formulado assim:
netstat -lpn | grep ":1234\b" | awk '{sub(/\/.*/, "", $NF); print $NF}' | xargs -i kill -kill {}
Explicação:
netstat -ltpn
l
) no TCP ( t
) e seus programas ( p
) sem resolver números de porta para 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 captemos :12345
, por exemplo. awk '{sub(/\/.*/, "", $NF); print $NF}'
Isso
sub(/regex/,"replacewith", #fieldnumber)
\/.*
""
$NF
, que significa o último campo (ou seja, o campo que contém PID/program
) print $NF
. O regex \/.*
corresponde a um literal /
e tudo depois dele, e então estamos substituindo-o por nada, essencialmente excluindo-o, então ficamos com apenas o número PID naquele campo.
xargs -i kill -kill {}
xargs -i
é um programa que permite fazer com que a saída do comando anterior atue como a entrada para outro comando. Nosso comando é kill -kill {}
onde {}
indica "a saída do comando anterior no pipeline", que é nosso número PID. Nota: todo este comando pode ser um pouco perigoso porque você pode acidentalmente matar algo que não queria. Poderia usar com um pouco mais de sanitização. Apenas certifique-se de obter o número de porta correto ao usá-lo.
Se você quiser transformar isso em uma função, adicione o seguinte ao seu ~/.bashrc
:
killatport(){
netstat -lpn | grep ":\b" | awk '{sub(/\/.*/, "", $NF); print $NF}' | xargs -i kill -kill {}
}
Salve e aplique as alterações usando source ~/.bashrc
. Agora você pode usar a função assim:
killatport 8088
Tags command-line bash scripts kill