Como encontro (e mato) processos que escutam / usam minhas portas tcp? Estou no mac os x.
Às vezes, após uma falha ou algum bug, meu aplicativo Rails está bloqueando a porta 3000. Não consigo encontrá-lo usando o ps -ef ...
Ao fazer
rails server
eu recebo
Endereço já em uso - bind (2) (Errno :: EADDRINUSE)
Atualização de 2014:
Para concluir algumas das respostas abaixo: Após executar os comandos kill, a exclusão do arquivo pid pode ser necessária rm ~/mypath/myrailsapp/tmp/pids/server.pid
function killport() { lsof -i TCP:$1 | grep LISTEN | awk '{print $2}' | xargs kill -9 }
Respostas:
Podes tentar
netstat
Para o macOS El Capitan e mais recente (ou se o seu netstat não suportar
-p
), uselsof
Para o Centos 7, use
fonte
lsof -t -i tcp:#{ARGV.first} | xargs kill
)lsof -t -i tcp:1234 | xargs kill
~/.bash_profile
:findandkill() { port=$(lsof -n -i4TCP:$1 | grep LISTEN | awk '{ print $2 }') kill -9 $port } alias killport=findandkill
Então agora eu só precisa digitarkillport 8080
e ele me salva alguns segundossudo
antes do lsof se você não vê saída-P
aolsof
comando para que a porta bruta seja visível na saída:lsof -P -i:3000
Encontrar:
Mate:
fonte
kill -15 <PID>
antes de recorrer para-9
a segurança.kill <PID>
não é suficiente / perigoso / incompleto?kill -15
oferece ao processo uma chance de limpar a si próprio.-9
faz.Nada acima funcionou para mim. Qualquer pessoa com minha experiência pode tentar o seguinte (funcionou para mim):
Corre:
verifique o status do PID relatado:
finalmente, "vá com ele":
fonte
kill -TERM
(ou apenaskill
) anteskill -QUIT
. Nem todo processo fará um desligamento ordenado no SIGQUIT.Um one-liner para extrair o PID do processo usando a porta 3000 e matá-lo.
O sinalizador -t remove tudo, exceto o PID, da saída lsof, facilitando sua eliminação.
fonte
lsof -ti:3000 -sTCP:LISTEN
Solução mais fácil :
Para porta única:
Mate várias portas com o comando de linha única:
82500 (ID do processo / PID)
82499
82499 82500
Finaliza os processos 82499 e 82500 em um único comando.
Para usar isso em
package.json
scripts:"scripts": { "start": "kill $(lsof -ti:3000,3001) && npm start" }
fonte
É fácil lembrar dessa linha de comando:
npx kill-port 3000
Para uma ferramenta mais poderosa com a pesquisa:
npx fkill-cli
PS: Eles usam pacotes javascript de terceiros.
npx
vem embutido com Node.js.Fontes: tweet | github
fonte
npx
vem com onpm
que acompanhanode.js
, portanto não é um pacote separado. Basta atualizar seu node.js e suas versões do npm.Você pode usar
lsof -i:3000
.Isso é "Listar arquivos abertos". Isso fornece uma lista dos processos e quais arquivos e portas eles usam.
fonte
lsof -i:3000
.No seu
.bash_profile
, crie um atalho paraterminate
o processo 3000:Em seguida, ligue
$terminate
se estiver bloqueado.fonte
Para matar forçosamente um processo como esse, use o seguinte comando
Onde 3000 é o número da porta em que o processo está sendo executado
isso retorna a identificação do processo (PID) e executa
Substitua o PID pelo número obtido após executar o primeiro comando
fonte
Isso lhe dará o pid, testado no MacOS.
fonte
lsof -n -iTCP:3407 -sTCP:LISTEN -n -l -P | grep 'LISTEN' | awk '{print $2}' | xargs kill -9
Execute na linha de comando no OS-X El Captain:
A opção concisa de lsof retorna apenas o PID.
fonte
Uma das maneiras de eliminar um processo em uma porta é usar a biblioteca python: freeport ( https://pypi.python.org/pypi/freeport/0.1.9 ). Uma vez instalado, basta:
fonte
lsof -t -i:3000
.. parece desnecessário.Para visualizar os processos que estão bloqueando a porta:
netstat -vanp tcp | grep 3000
Para matar os processos que estão bloqueando a porta:
kill $(lsof -t -i :3000)
fonte
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
No entanto, funcionará na maioria das distribuições Linux3000
estiver ocupada. No entanto, se nenhum processo estiver bloqueando a porta, você receberá umkill: not enough arguments
erro.netstat -vanp tcp | grep 3000
para a sua porta ocupada?bash
ezsh
shell. Funciona bem para mim. Não sei por que não está funcionando para você. Pode haver algo a ver com High Sierra? Eu não tenho nenhuma idéia: /Encontre a conexão aberta
Eliminar por ID do processo
fonte
Encontre e mate:
Essa linha de comando única é fácil e funciona corretamente.
fonte
Possíveis maneiras de conseguir isso:
topo
O comando top é a maneira tradicional de visualizar o uso de recursos do seu sistema e ver os processos que estão ocupando a maioria dos recursos do sistema. Top exibe uma lista de processos, com os que usam mais CPU na parte superior.
ps
O comando ps lista os processos em execução. O comando a seguir lista todos os processos em execução no seu sistema:
Você também pode canalizar a saída através do grep para procurar um processo específico sem usar outros comandos. O comando a seguir procuraria o processo do Firefox:
A maneira mais comum de transmitir sinais para um programa é com o comando kill.
lsof
Lista de todos os arquivos abertos e os processos que os abriram.
ou
fonte
lsof -i tcp:port_number
- listará o processo em execução nessa portakill -9 PID
- matará o processono seu caso, será
lsof -i tcp:3000
do seu terminal encontre o PID do processokill -9 PID
fonte
Esses dois comandos ajudarão você a encontrar e matar o processo do servidor
fonte
Adicionar a
~/.bash_profile
:Então
source ~/.bash_profile
e corrakillTcpListen 8080
fonte
Usando sindresorhus é fkill ferramenta, você pode fazer isso:
fonte
TL; DR:
Se você estiver em uma situação em que existem clientes e servidores usando a porta, por exemplo:
então você provavelmente não quer matar os dois.
Nesta situação, você pode usar
-sTCP:LISTEN
para mostrar apenas o pid dos processos que estão ouvindo. Combinando isso com o-t
formato conciso, você pode eliminar automaticamente o processo:fonte
Eu fiz um pouco de função para isso, adicioná-lo ao seu arquivo rc (
.bashrc
,.zshrc
ou qualquer outro)então você pode apenas digitar
kill-by-port 3000
para matar seu servidor Rails (substituindo 3000 por qualquer porta em que esteja executando)caso contrário, você sempre pode digitar
kill -9 $(cat tmp/pids/server.pid)
no diretório raiz do railsfonte
\$PORT
para que a mensagem fosse exibida corretamente. Caso contrário, funciona muito bem!Para matar várias portas.
Espero que esta ajuda!
fonte
Você deve tentar isso, esta técnica é independente do sistema operacional.
Além da sua aplicação, existe uma pasta chamada tmp, dentro dela existe outra pasta chamada pids. Esse arquivo contém o arquivo pid do servidor. Simplesmente exclua esse arquivo. porta se mata automaticamente.
Eu acho que esse é o caminho mais fácil.
fonte
Aqui está uma função auxiliar bash para matar vários processos por nome ou porta
Uso:
Exemplo:
fonte
Você pode tentar isso
fonte
Se você quer uma maneira livre de código - abra o gerenciador de atividades e force o kill kill :)
fonte
Eu uso isso:
cat tmp/pids/server.pid | pbcopy
Então
kill -9 'paste'
fonte
Etapa 1: Encontre o servidor que está sendo executado:
ps aux | grep puma
Etapa 2: Mate os servidores Mate -9 [número do servidor]fonte
No Mac OS
kill -9 $(lsof -i TCP:3000 | grep LISTEN | awk '{print $2}')
fonte