Abri a porta # 5955 de uma classe java para me comunicar com um cliente. Como fecho esta porta depois de terminar? e também qual comando pode me mostrar se a porta está aberta ou fechada?
Abri a porta # 5955 de uma classe java para me comunicar com um cliente. Como fecho esta porta depois de terminar? e também qual comando pode me mostrar se a porta está aberta ou fechada?
Respostas:
Descubra o ID do processo (PID) que está ocupando o número da porta (por exemplo, 5955) que você gostaria de liberar
sudo lsof -i :5955
Mate o processo que está atualmente usando a porta usando seu PID
sudo kill -9 PID
kill PID
(o que implica -15), depois tentar -2 e -1. -9 é o último recurso somente se todas as outras opções falharem no trabalho.
Para encontrar o processo, tente:
sudo lsof -i :portNumber
Mate o processo que está atualmente usando a porta usando seu PID
kill PID
e verifique se a porta foi fechada. Caso contrário, tente:
kill -9 PID
Eu só faria o seguinte se o anterior não funcionasse
sudo kill -9 PID
Apenas para estar seguro. Novamente, dependendo de como você abriu a porta, isso pode não importar.
No entanto, você abriu a porta e fechou-a da mesma maneira. Por exemplo, se você criou um soquete, vincule-o à porta 0.0.0.0:5955 e chame listen, feche o mesmo soquete.
Você também pode simplesmente matar o processo que tem a porta aberta.
Se você deseja descobrir qual processo tem uma porta aberta, tente o seguinte:
lsof -i :5955
Se você quiser saber se uma porta está aberta, você pode executar o mesmo comando lsof (se houver algum processo aberto, aberto; caso contrário, não está), ou apenas tentar se conectar a ela, por exemplo:
nc localhost 5955
Se retornar imediatamente sem saída, a porta não estará aberta.
Vale a pena mencionar que, tecnicamente falando, não é uma porta aberta, mas uma combinação host: porta. Por exemplo, se você estiver conectado a uma LAN como 10.0.1.2, poderá vincular um soquete a 127.0.0.1:5955 ou 10.0.1.2:5955, sem que um deles afete o outro, ou vincular a 0.0.0.0 : 5955 para lidar com os dois de uma vez. Você pode ver todos os endereços IPv4 e IPv6 do seu computador com o ifconfig
comando
muito simples encontrar a porta 5900:
sudo lsof -i :5900
considerando 59553 como PID
sudo kill 59553
Em 2018, aqui está o que funcionou para mim usando o MacOS HighSierra:
sudo lsof -nPi: yourPortNumber
então:
sudo kill -9 yourPIDnumber
lsof -nPi
é um pouco melhor porque o número da porta é realmente visível na saída e você tem uma ideia melhor do que está matando.
sudo lsof -nPi | grep LISTEN
Você também pode usar este primeiro comando para eliminar um processo que possui uma porta específica:
sudo netstat -ap | grep :<port_number>
Por exemplo, digamos que esse processo contenha a porta 8000 TCP e execute o comando:
sudo netstat -ap | grep :8000
produzirá a linha correspondente ao processo que contém a porta 8000 , por exemplo:
tcp 0 0 *:8000 *:* LISTEN 4683/procHoldingPort
Nesse caso, procHoldingPort é o nome do processo que abriu a porta, 4683 é seu pid e 8000 (observe que é TCP) é o número da porta que ele mantém (que você deseja fechar).
Em seguida, mate o processo, seguindo o exemplo acima:
kill 4683
Como outros mencionados aqui, se isso não funcionar (você pode tentar usar kill com -9 como argumento):
kill -9 4683
Novamente, em geral, é melhor evitar o envio de SIGKILL (-9), se puder.
Felicidades,
Cara.
Eu uso lsof
combinado com kill
, como mencionado acima; mas escreveu um pequeno script bash rápido para automatizar esse processo.
Com este script, você pode simplesmente digitar killport 3000
de qualquer lugar, e isso matará todos os processos em execução na porta 3000
.
lsof
em combinação com kill
não retornou nada e fez meu script travar no macOS Sierra. Mas killport
funciona como um encanto e é mais rápido. Obrigado!
Eu criei uma função para esse fim.
function free_port() {
if [ -z $1 ]
then
echo no Port given
else
PORT=$1;
PID=$(sudo lsof -i :$PORT) # store the PID, that is using this port
if [ -z $PID ]
then
echo port: $PORT is already free.
else
sudo kill -9 $PID # kill the process, which frees the port
echo port: $PORT is now free.
fi
fi
}
free_port 80 # you need to change this port number
Copiar e colar este bloco de código no seu terminal deve liberar a porta desejada. Lembre-se de alterar o número da porta na última linha.
tente abaixo, assumindo que a porta em execução seja 8000
:
free-port() { kill "$(lsof -t -i :8000)"; }
Eu encontrei a referência aqui
Primeiro, encontre a identificação do Procees (pid) que ocupou a porta necessária (por exemplo, 5434)
ps aux | grep 5434
2. matar esse processo
kill -9 <pid>