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?
Enviar -9 não deve ser a primeira tentativa de matar um processo, e é um péssimo hábito. Pelo que me lembro, você deve primeiro usar 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.
Miau
3
fez kill PID sem quaisquer bandeiras como sugerido por @Meow e isso funcionou para mim
Toni Leigh
39
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 ifconfigcomando
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.
Você salvou meu dia. Por alguma razão, lsofem combinação com killnão retornou nada e fez meu script travar no macOS Sierra. Mas killportfunciona como um encanto e é mais rápido. Obrigado!
wout 11/09/16
4
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.
Quando o programa que abriu a porta sair, a porta será fechada automaticamente. Se você matar o processo Java executando este servidor, isso deve ser feito.
Respostas:
Descubra o ID do processo (PID) que está ocupando o número da porta (por exemplo, 5955) que você gostaria de liberar
Mate o processo que está atualmente usando a porta usando seu PID
fonte
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:
Mate o processo que está atualmente usando a porta usando seu PID
e verifique se a porta foi fechada. Caso contrário, tente:
Eu só faria o seguinte se o anterior não funcionasse
Apenas para estar seguro. Novamente, dependendo de como você abriu a porta, isso pode não importar.
fonte
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:
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:
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
comandofonte
muito simples encontrar a porta 5900:
considerando 59553 como PID
fonte
Em 2018, aqui está o que funcionou para mim usando o MacOS HighSierra:
sudo lsof -nPi: yourPortNumber
então:
sudo kill -9 yourPIDnumber
fonte
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
Um forro é o melhor
Exemplo: No mac, queria limpar a porta 9604. O comando a seguir funcionou como um encanto
fonte
Você também pode usar este primeiro comando para eliminar um processo que possui uma porta específica:
Por exemplo, digamos que esse processo contenha a porta 8000 TCP e execute o comando:
produzirá a linha correspondente ao processo que contém a porta 8000 , por exemplo:
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:
Como outros mencionados aqui, se isso não funcionar (você pode tentar usar kill com -9 como argumento):
Novamente, em geral, é melhor evitar o envio de SIGKILL (-9), se puder.
Felicidades,
Cara.
fonte
Eu uso
lsof
combinado comkill
, 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 porta3000
.https://github.com/xtrasimplicity/killport
fonte
lsof
em combinação comkill
não retornou nada e fez meu script travar no macOS Sierra. Maskillport
funciona como um encanto e é mais rápido. Obrigado!Eu criei uma função para esse fim.
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.
fonte
tente abaixo, assumindo que a porta em execução seja
8000
:Eu encontrei a referência aqui
fonte
Quando o programa que abriu a porta sair, a porta será fechada automaticamente. Se você matar o processo Java executando este servidor, isso deve ser feito.
fonte
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
fonte