it-swarm-pt.tech

Encontrar (e matar) a porta de bloqueio do processo 3000 no Mac

Como faço para encontrar processos que escuta/usa minhas portas tcp? Eu 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 ps -ef ... Como encontro a coisa estúpida e a mato brutalmente ...? 

Ao fazer

Rails server

Eu recebo

Endereço já em uso - bind (2) (Errno :: EADDRINUSE)

Atualização de 2014:

Para completar algumas das respostas abaixo: Depois de executar os comandos kill, excluir o arquivo pid pode ser necessário rm ~/mypath/myrailsapp/tmp/pids/server.pid

1286
oma
  1. Você pode tentar netstat

    netstat -vanp tcp | grep 3000
    
  2. Para macOS El Capitan e mais recente (ou se o seu netstat não suporta -p), use lsof

    Sudo lsof -i tcp:3000 
    
  3. Para Centos 7 use

    netstat -vanp --tcp | grep 3000
    
2147
ghostdog74

Encontrar:

[Sudo] lsof -i :3000

Mate:

kill -9 <PID>
1399
Filip Spiridonov

Nada acima funcionou para mim. Qualquer outra pessoa com minha experiência poderia tentar o seguinte (funcionou para mim):

Corre:

lsof -i :3000 (where 3000 is your current port in use)

em seguida, verifique o status do PID informado:

ps ax | grep <PID>

finalmente, "begone with it":

kill -QUIT <PID>
129
Austin

Um one-liner para extrair o PID do processo usando a porta 3000 e eliminá-lo.

lsof -ti:3000 | xargs kill

O sinalizador -t remove tudo, exceto o PID da saída lsof, facilitando sua eliminação.

109
Zlemini

Você pode usar lsof -i:3000.

Isso é "List Open Files". Isso fornece uma lista dos processos e quais arquivos e portas eles usam.

89
DerMike

Em seu .bash_profile, crie um atalho para terminate o processo 3000:

terminate(){
  lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9 
}

Em seguida, chame $terminate se estiver bloqueado.

53
alexzg

Para matar forçosamente um processo como esse, use o seguinte comando 

lsof -n -i4TCP:3000 

Onde 3000 é o número da porta, o processo está sendo executado em

isso retorna o ID do processo (PID) e executa 

kill -9 "PID"

Substitua o PID pelo número que você obteve após executar o primeiro comando 

For Instance, if I want kill the process running on port 8080

52
tadtab
lsof -P | grep ':3000' | awk '{print $2}'

Isso lhe dará apenas o pid, testado no MacOS.

34
Kris

Esta única linha de comando é fácil de lembrar: 

npx kill-port 3000

Para uma ferramenta mais poderosa com pesquisa:

npx fkill-cli 


PS: Eles usam pacotes de javascript de terceiros

Fontes: Tweet | github

32
Bruno Lemos

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, simplesmente:

# install freeport
pip install freeport

# Once freeport is installed, use it as follows
$ freeport 3000
Port 3000 is free. Process 16130 killed successfully
27
YBathia

Para ver os processos bloqueando a porta:

netstat -vanp tcp | grep 3000

Para matar os processos que bloqueiam a porta:

kill $(lsof -t -i :3000)

22
Henry

Encontre a conexão aberta  

lsof -i -P | grep -i "escuta"

Matar por ID do processo

kill -9 'PID'

22
Sourabh Bhagat

Encontre o PID e mate o processo.

lsof -ti:3000 | xargs kill
17
Rahul Garg

Possíveis maneiras de conseguir isso: 

topo

O comando principal é a maneira tradicional de visualizar o uso de recursos do sistema e ver os processos que estão ocupando mais recursos do sistema. Top exibe uma lista de processos, com os que usam mais CPU no topo.

ps

O comando ps lista os processos em execução. O comando a seguir lista todos os processos em execução no seu sistema:

ps -A

Você também pode canalizar a saída através do grep para procurar por um processo específico sem usar nenhum outro comando. O seguinte comando procuraria pelo processo do Firefox:

ps -A | grep firefox

A maneira mais comum de passar sinais para um programa é com o comando kill.

kill PID_of_target_process

lsof

Lista de todos os arquivos abertos e os processos que os abriram.

lsof -i -P | grep -i "listen"
kill -9 PID

ou

 lsof -i tcp:3000 
13
smooth

Encontre e mate:

Esta única linha de comando é fácil e funciona corretamente. 

kill -9 $(lsof -ti tcp:3000)
13
Dylan Breugne

Solução mais fácil : Mate várias portas com o comando de linha única.

kill $(lsof -t -i:3000,3001) // 3000 and 3001 are the ports to be freed

lsof -t -i: 3000

82500

lsof-t -i: 3001

82499

lsof -t -i: 3001,3000

82499 82500

mata $ (lsof -t -i: 3001,3000)

Encerra os processos 82499 e 82500 no comando único.

lsof -t -i: 3000

lsof-t -i: 3001

Você pode usar isso em scripts package.json

"scripts": { "start": "kill $(lsof -t -i:3000,3001) && npm start" }

12
Abhijith

Usando sindresorhus 's fkill tool, você pode fazer isso:

$ fkill :3000
5
Kodie Grantham

Adicione a ~/.bash_profile:

function killTcpListen () {
  kill -QUIT $(Sudo lsof -sTCP:LISTEN -i tcp:$1 -t)
}

Então source ~/.bash_profile e corra

killTcpListen 8080

5
rofrol

Eu fiz uma pequena função para isso, adicione-o ao seu arquivo rc (.bashrc, .zshrc ou o que for)

function kill-by-port {
  if [ "$1" != "" ]
  then
    kill -9 $(lsof -ni tcp:"$1" | awk 'FNR==2{print $2}')
  else
    echo "Missing argument! Usage: kill-by-port $PORT"
  fi
}

então você pode simplesmente digitar kill-by-port 3000 para matar seu servidor Rails (substituindo 3000 por qualquer porta que esteja sendo executada)

na falta disso, você poderia sempre digitar kill -9 $(cat tmp/pids/server.pid) do diretório raiz do Rails

3
Caleb Keene

TL; DR:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill

Se você estiver em uma situação em que haja clientes e servidores usando a porta, por exemplo:

$ lsof -i tcp:3000
COMMAND     PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node       2043 benjiegillam   21u  IPv4 0xb1b4330c68e5ad61      0t0  TCP localhost:3000->localhost:52557 (ESTABLISHED)
node       2043 benjiegillam   22u  IPv4 0xb1b4330c8d393021      0t0  TCP localhost:3000->localhost:52344 (ESTABLISHED)
node       2043 benjiegillam   25u  IPv4 0xb1b4330c8eaf16c1      0t0  TCP localhost:3000 (LISTEN)
Google    99004 benjiegillam  125u  IPv4 0xb1b4330c8bb05021      0t0  TCP localhost:52557->localhost:3000 (ESTABLISHED)
Google    99004 benjiegillam  216u  IPv4 0xb1b4330c8e5ea6c1      0t0  TCP localhost:52344->localhost:3000 (ESTABLISHED)

então você provavelmente não quer matar os dois.

Nesta situação, você pode usar -sTCP:LISTEN para mostrar apenas o pid de processos que estão escutando. Combinando isso com o formato -t terse você pode automaticamente matar o processo:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
3
Benjie

lsof -i tcp:port_number - listará o processo em execução nessa porta

kill -9 PID - irá matar o processo

no seu caso, será

lsof -i tcp:3000 do seu terminal encontre o PID do processo

kill -9 PID

1
Shan

Aqui está uma função bash auxiliar para matar vários processos por nome ou porta

fkill() {
  for i in [email protected];do export q=$i;if [[ $i == :* ]];then lsof -i$i|sed -n '1!p';
  else ps aux|grep -i $i|grep -v grep;fi|awk '{print $2}'|\
  xargs [email protected] sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}

Uso:

$ fkill [process name] [process port]

Exemplo:

$ fkill someapp :8080 node :3333 :9000
1
Miguel Mota

Você deve tentar isso, essa técnica é independente do sistema operacional.

Na lateral da sua aplicação existe uma pasta chamada tmp, dentro dela existe uma outra pasta chamada pids. Esse arquivo contém o arquivo pid do servidor. Basta excluir esse arquivo. porta automaticamente se mata.

Eu acho que esse é o caminho mais fácil. 

1
Arun P

Você pode tentar isso

netstat -vanp tcp | grep 3000
0
Foram Thakral

Se você quiser uma maneira livre de código - abra o gerenciador de atividades e force o nó de eliminação :)

0
Hannah Louisa Carney

Use o seguinte comando para eliminar o processo na porta 3000 kill $(lsof -t -i:3000)

0
vinayb21