como liberar localhost do erro: ouça EADDRINUSE

120

Estou testando um servidor escrito em nodejs no Windows 7 e quando tento executar o testador na linha de comando, recebo o seguinte erro

Error: listen EADDRINUSE
at errnoException (net.js:614:11)
at Array.0 (net.js:704:26)
at EventEmitter._tickCallback (node.js:192:40)

como posso corrigi-lo sem reiniciar?

Adão
fonte
9
sudo killall nodepode ser útil
Hashir Hussain

Respostas:

101

Isso significa que o endereço ao qual você está tentando ligar o servidor está em uso. Tente outra porta ou feche o programa usando essa porta.

fent
fonte
Não consegui encontrar nada usando a porta 3000, mas alterá-la funcionou!
Dennis
7
Como esse programa de nó único é a única coisa que utiliza a porta 3000 na minha máquina, parece bastante claro que algo aconteceu para impedir que a instanciação anterior do processo do meu nó seja desligada corretamente. Estava funcionando quando eu o usei node app.jse o interrompi com Ctrl + C, mas comecei a ter o problema EADDRINUSE após a primeira vez em que usei npm start, então parece que a solução real seria usar algo diferente de Ctrl + C para desligar após o uso npm start.
David Mason
Seu npm startscript pode ser mais de um programa de nó, ou um programa de nó executado em segundo plano, ou o programa pode ter processos filhos que usam essa porta.
fent
1
Muitas vezes, esse erro ocorre devido a um processo de nó que não foi encerrado com jato. Mas, às vezes, a porta está sendo usada por outros processos e, portanto, pode ser difícil entender / localizar o processo correto bloqueando-a. O WolfReporter abaixo tem uma solução correta para esse problema! stackoverflow.com/a/22875192/36975
qualbeen
6
Eu fiz ps aux | grep node, encontrar o ID do processo (segunda coluna) e simplesmente matá-lo com kill <pid>(a minha era kill 18762).
Nik_m
168

Corre:

ps -ax | grep node

Você receberá algo como:

60778 ??         0:00.62 /usr/local/bin/node abc.js

Então faça:

kill -9 60778
Komposr
fonte
Obrigado! Funciona na minha máquina!
Olefrank
Obrigado. Era disso que eu precisava. Eu tinha o pm2 instalado, que inicia automaticamente o aplicativo do nó quando está fechado. Eu tive que desativar o pm2 para iniciar automaticamente o nó.
KlevisGjN 24/02
Trabalho! Muito obrigado
Wim den Herder,
9
Como você faz isso no Windows?
William William
kill -15 60778seria muito melhor, pois iria permitir que o processo para sair graciosamente ( SIGTERM) em vez se o envio de umaSIGKILL
Praj
39

No Linux (derivados do Ubuntu pelo menos)

killall node

é mais fácil que este formulário.

ps | grep <something>
kill <somepid>

Nem funcionará se você tiver um filho órfão segurando a porta. Em vez disso, faça o seguinte:

netstat -punta | grep <port>

Se a porta estiver sendo mantida, você verá algo assim:

tcp           0      0.0.0.0:<port>          0.0.0.*       LISTEN     <pid>/<parent>

Agora mate por pid:

kill -9 <pid>
WolfReporter
fonte
1
Isso deve ser marcado como a resposta completa. Pois no meu caso também, era uma criança órfã. É isso que eles chamam de processo zumbi?
Nithish Inpursuit Ofhappiness
1
Em vez do esperado <pid>/<parent>eu recebo-
Francisco Corrales Morales
35

O comando a seguir fornecerá uma lista dos processos do nó em execução.

ps | grep node

Para liberar essa porta, pare o processo usando o seguinte.

kill <processId>
wcurtis
fonte
3
Você pode adicionar um | grep -v greppara excluir o grepprocesso.
Garrett Hyde
6
Como o poster original escreveu: "no Windows 7" ... ;-)
Golo Roden
4
Uma alternativa muito melhor seriapidof node
Itay Grudev
pidoffoi facilmente instalado para mim no OSX com homebrewbrew install pidof
electblake
1
Se você estiver executando mais do que apenas aplicativos de nó, é possível que o endereço esteja associado a outro aplicativo. Não seria melhor procurar o pid vinculado à porta em que você está tentando iniciar? ie: para linux você pode usar netstat -lnptu | porta grep #. Não tenho certeza qual é o equivalente para o Windows.
chrisst
31

Você está recebendo o erro EADDRINUSEporque a porta que seu aplicativo deseja usar está ocupada por outro processo. Para liberar essa porta, você precisa finalizar o processo de ocupação.

Como você está no Windows , você pode finalizar o processo usando o prompt de comando ( cmd). Com o cmdvocê pode descobrir o ID do processo (PID) do aplicativo de bloqueio. Você precisará do PID para finalizar / interromper o processo.

Aqui está um guia passo a passo ...

  1. Encontre todos os processos em execução em uma porta especificada (neste exemplo, Porta é "3000"):

    netstat -ano | encontrar ": 3000"

  2. O netstatcomando listará todos os processos em execução na porta especificada. Na última coluna dos netstatresultados, você pode ver os PIDs (neste exemplo, o PID é "8308"). Você pode descobrir mais sobre um específico PIDexecutando o seguinte comando:

    lista de tarefas / fi "pid eq 8308"

  3. Se você deseja finalizar um processo, você pode fazer isso com o seguinte comando usando o seu PID(neste exemplo, o PID é "8308"):

    skillkill / pid 8308 / f

Captura de tela

insira a descrição da imagem aqui

Benny Neugebauer
fonte
1
explicação sólida.
Joe Healy
19

Quando você receber um erro Erro: ouça EADDRINUSE,

Tente executar os seguintes comandos do shell:

netstat -a -o | grep 8080
taskkill /F /PID 6204

I greped para 8080, porque eu sei que meu servidor está executando na porta 8080. ( staticme diz quando eu iniciá-lo: 'servindo no '' http://127.0.0.1:8080 '.) Você pode ter que procurar um diferente porta.

swathy valluri
fonte
1
Finalmente! Uma resposta que pesquisa por porta, em vez de por processo. Não é apenas um nó que pode amarrar uma porta!
Michael Scheper
Eu produzi um módulo para detectar qual processo em execução está bloqueando uma porta, chamada porthog . Basicamente, executa o código acima.
Corey
15

suponha que seu servidor esteja sendo executado em port 3000

lsof -i tcp:3000
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    node    11716 arun   11u  IPv6 159175      0t0  TCP *:3000 (LISTEN)

depois desse uso kill -9 <pid>

no caso acima sudo kill -9 11716

Arun Kasyakar
fonte
12

use abaixo do comando para matar um processo em execução em uma determinada porta - 3000 neste exemplo abaixo

kill -9 $(lsof -t -i:3000)
Atta Ur Rahman
fonte
7

Uma solução possível que funcionou para mim foi simplesmente fechar a janela no navegador onde eu tinha o script " http: // localhost: 3000 / " correspondente em execução.

iloo
fonte
Yep, janela do navegador ainda em aberto é uma pegadinha comum com portas localhost :-)
Dave Everitt
7

Verifique o ID do processo

sudo lsof -i: 8081

Do que matar o processo em particular

sudo kill -9 2925

insira a descrição da imagem aqui

Surender Kumar
fonte
6

Quando você receber um erro

Erro: ouça EADDRINUSE

Abra o prompt de comando e digite as seguintes instruções:

netstat -a -o | grep 8080
taskkill /F /PID** <*ur Process ID no*>

depois disso, reinicie a interface do telefone.

Se você quiser saber qual ID de processo o phonegap está usando, abra TASK MANAGER e veja o cabeçalho PID da coluna e localize o número PID.

Eshan Chattaraj
fonte
Eu não poderia começar taskkill para o trabalho, então eu abri o gerenciador de tarefas e acrescentou o PID e matou-o lá thx
Tom Stickel
5

O killall -9nó mencionado acima , sugerido por Patrick, funciona conforme o esperado e resolve o problema, mas você pode ler a parte de edição desta mesma resposta sobre por que kill -9talvez não seja a melhor maneira de fazê-lo.

Além disso, convém direcionar um único processo, em vez de matar cegamente todos os processos ativos.

Nesse caso, primeiro obtenha o ID do processo (PID) do processo em execução nessa porta (por exemplo, 8888):

lsof -i tcp:8888

Isso retornará algo como:

COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     57385   You   11u  IPv6 0xac745b2749fd2be3      0t0  TCP *:ddi-tcp-1

(ESCUTE) Então faça (ps - na verdade não. Por favor, continue lendo abaixo):

kill -9 57385
Hemant Raghuwanshi
fonte
4

Isso funciona no Mac:

Passo 1.

sudo lsof -i tcp:3000 (or whatever port you want to kill)

O comando acima fornecerá os IDs do processo que atualmente mantêm a porta.

Passo 2.

Kill -9 <pid>
saran3h
fonte
3

você pode alterar sua porta no app.js ou no arquivo de configuração do seu projeto.

padrão ('porta', 80)

e para ver se a porta 80 já está em uso, você pode fazer

netstat -antp | grep 80

netstat -antp | nó grep

você pode querer ver se o processo do nó já está em execução ou não.

nó ps -ef | grep

e se você já estiver em execução, poderá matá-lo usando

nó killall

Adeel Ahmad
fonte
1

Criei 2 servidores, ouvindo na mesma porta 8081, executando o mesmo código, enquanto aprendia

A primeira falha na criação do servidor funcionou A segunda falha na criação do servidor com EADDRINUSE

Atrasos no retorno de chamada do node.js. podem ter sido os motivos por que não funcionaram ou a 2ª criação do servidor teve exceção e o programa foi encerrado; portanto, o 1º servidor também está fechado

Dica de problema com 2 servidores, obtive de: Como corrigir erro: ouça EADDRINUSE enquanto estiver usando o nodejs?

Manohar Reddy Poreddy
fonte
1

Erro: ouça EADDRINUSE para resolvê-lo no Ubuntu, execute no terminal netstat -nptl e, depois disso, kill -9 {process-number}este comando é para matar o processo do nó e agora você pode tentar executar novamente o comando node server.js

Ex

listen EADDRINUSE ::: 8080

netstat -nptl

tcp6 0 0 ::: 9000 ::: * LISTEN 9660 / java
tcp6 0 0 ::: 5800 ::: * LISTEN -
tcp6 0 0 ::: 5900 ::: * LISTEN -
tcp6 0 0 ::: 8080 :: : * LISTEN 10401 / nó
tcp6 0 0 ::: 20080 ::: * LISTEN 9660 / java
tcp6 0 0 ::: 80 ::: * LISTEN -
tcp6 0 0 ::: 22 ::: * LISTEN -
tcp6 0 0 ::: 10137 ::: * LISTEN 9660 / java

kill -9 10401

navnit kapadiya
fonte
2
Usuário disse que está no Windows. No Windows netstatrecebe parâmetros diferentes. netstat -a -p tcp -b -vproduziria o nome do processo.
Arboreal84
0

Eu tenho o nó vermelho instalado no meu Mac e no meu Raspberry Pi. Teve exatamente o mesmo problema e fazer 'killall' não ajudou. Depois que desliguei o Raspberry Pi e reiniciei o computador, ele funcionou bem.

alkopop79
fonte
0

Pode ser possível que você tenha tentado executar o comando npm start em duas guias diferentes. Você não pode executar o npm start quando ele já estiver em execução em alguma guia. Verifique-o uma vez.

Bhudke Aakshayy
fonte
Forneça mais detalhes.
DeshDeep Singh
0

Para quem já tentou todas as opções acima, mas ainda não consegue encontrar o processo de rouge, tente todas novamente, mas certifique-se de incluir "sudo" na frente dos comandos.

MMMTroy
fonte
0

Se você gosta mais da interface do usuário, encontre o processo Node.js no gerenciador de tarefas do Windows e mate-o.

polina-c
fonte
0

O nó ps -ef | grep encontra o app.js, mata o pid do app.js

megan5
fonte
0

simplesmente mate o nó como pkill -9 no terminal do ubantu do que o nó inicial

Aditya Prakash
fonte
0

Você precisará matar a porta tentando usar o seguinte comando no terminal

$ sudo killall -9 nodejs
Shivam Kohli
fonte
0

[RESOLVIDO]

Pode ser tarde demais, mas está funcionando como um encanto.

Você precisa pm2estar instalado

npm install -g pm2

Para parar o servidor em execução atual (server.js):

pm2 stop -f server.js
dariush f
fonte
0

Eu resolvi esse problema adicionando abaixo no meu package.json por matar o PORT - 4000 ativo (no meu caso) em execução no WSL2 / Linux / Mac

"scripts": {
    "dev": "nodemon app.js",
    "predev":"fuser -k 4000/tcp && echo 'Terminated' || echo 'Nothing was running on the PORT'",
  }

Fonte

zashishz
fonte
-1

Para matar o servidor do nó, primeiro execute este comando no seu terminal:

  1. top
  2. abra outra janela e copie o servidor idda janela anterior: PID number -9 kill agora você matou o servidor do nó e tente executar o aplicativo novamente.
Mohammed Dwina
fonte
-1

Eu usei o comando netstat -ano | grep "portnumber"para listar o número da porta / PID para esse processo. Então, você pode usar taskkill -f //pid 111111para interromper o processo, sendo o último valor o pid encontrado no primeiro comando.

Um problema que encontro às vezes é o reaparecimento do nó, mesmo depois de encerrar o processo, por isso tenho que usar o bom e velho gerenciador de tarefas para eliminar manualmente o processo do nó.

davida227
fonte
-4

Na janela, execute este comando:

taskkill /F /PID 1952
thinhnk
fonte
1
1952 é uma variável. O processo para matar pode ter um ID diferente.
Design by Adrian