cómo liberar localhost del error: escuche EADDRINUSE


120

Estoy probando un servidor escrito en nodejs en Windows 7 y cuando intento ejecutar el probador en la línea de comandos, aparece el siguiente error

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

¿Cómo puedo solucionarlo sin reiniciar?


9
sudo killall nodepuede ser útil
Hashir Hussain

Respuestas:


101

Significa que la dirección a la que está intentando enlazar el servidor está en uso. Pruebe con otro puerto o cierre el programa usando ese puerto.


No pude encontrar nada usando el puerto 3000, ¡pero cambiarlo funcionó!
Dennis

7
Dado que este programa de nodo único es lo único que usa el puerto 3000 en mi máquina, parece bastante claro que algo ha sucedido para evitar que la instanciación previa de mi proceso de nodo se apague correctamente. Estaba funcionando cuando lo usé node app.jsy lo detuve con Ctrl + C, pero comencé a tener el problema EADDRINUSE después de la primera vez que lo usé npm start, por lo que parece que la solución real sería usar algo que no sea Ctrl + C para apagarlo después de usarlo npm start.
David Mason

Su npm startsecuencia de comandos puede ser más de un programa de nodo, o un programa de nodo que se ejecuta en segundo plano, o el programa puede tener procesos secundarios que utilizan ese puerto.
fent de

1
Muy a menudo, este error ocurre porque un proceso de nodo no se ha terminado. Pero a veces el puerto está siendo utilizado por otros procesos y, por lo tanto, puede ser difícil entender / localizar el proceso correcto que lo bloquea. WolfReporter a continuación tiene una solución correcta para este problema. stackoverflow.com/a/22875192/36975
qualbeen

6
Lo hice ps aux | grep node, encontré el ID del proceso (segunda columna) y simplemente lo maté con kill <pid>(el mío era kill 18762).
nik_m

168

Correr:

ps -ax | grep node

Obtendrás algo como:

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

Entonces hazlo:

kill -9 60778

¡Gracias! ¡Funciona en mi máquina!
olefrank

Gracias. Esto era lo que necesitaba. Tenía instalado pm2, que inicia automáticamente la aplicación de nodo cuando está cerrada. Tuve que deshabilitar pm2 para iniciar automáticamente el nodo.
KlevisGjN

¡Trabajos! Muchas gracias
Wim den Herder

9
¿Cómo se hace eso en Windows?
William

kill -15 60778sería mucho mejor, ya que permitiría que el proceso salga con gracia ( SIGTERM) en su lugar si envía unSIGKILL
praj

39

En Linux (derivados de Ubuntu al menos)

killall node

es más fácil que esta forma.

ps | grep <something>
kill <somepid>

Ninguno de los dos funcionará si tiene un niño huérfano sosteniendo el puerto. En su lugar, haz esto:

netstat -punta | grep <port>

Si el puerto está retenido, verá algo como esto:

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

Ahora mata por pid:

kill -9 <pid>

1
Esto debe marcarse como la respuesta completa. Porque también en mi caso fue un niño huérfano. ¿Es esto lo que llaman un proceso zombi?
Nithish Inpursuit Ofhappiness

1
En lugar de lo esperado <pid>/<parent>, obtengo-
Francisco Corrales Morales

35

El siguiente comando le dará una lista de los procesos de nodo en ejecución.

ps | grep node

Para liberar ese puerto, detenga el proceso usando lo siguiente.

kill <processId>

3
Es posible que desee agregar un | grep -v greppara excluir el grepproceso.
Garrett Hyde

6
Como escribió el cartel original: "en Windows 7" ... ;-)
Golo Roden

4
Una alternativa mucho mejor seríapidof node
Itay Grudev

pidofse instaló fácilmente para mí en osx con homebrewbrew install pidof
electblake

1
Si está ejecutando más aplicaciones de nodo, es posible que la dirección esté vinculada a alguna otra aplicación. ¿No sería mejor buscar el pid que está vinculado al puerto en el que está intentando iniciar? es decir: para linux puede usar netstat -lnptu | grep puerto #. No estoy seguro de cuál es el equivalente de Windows.
chrisst

31

Recibe el error EADDRINUSEporque el puerto, que su aplicación desea usar, está ocupado por otro proceso. Para liberar este puerto, debe finalizar el proceso de ocupación.

Ya que está en Windows , puede finalizar el proceso usando el símbolo del sistema ( cmd). Con el cmdpuede descubrir el ID de proceso (PID) de la aplicación de bloqueo. Necesitará el PID para terminar / matar el proceso.

Aquí hay una guía paso a paso ...

  1. Busque todos los procesos que se ejecutan en un puerto específico (en este ejemplo, el puerto es "3000"):

    netstat -ano | buscar ": 3000"

  2. El netstatcomando enumerará todos los procesos que se ejecutan en el puerto especificado. En la última columna de los netstatresultados puede ver la PIDs (en este ejemplo, PID es "8308"). Puede obtener más información sobre un específico PIDejecutando el siguiente comando:

    lista de tareas / fi "pid eq 8308"

  3. Si desea terminar un proceso, puede hacerlo con el siguiente comando usando su PID(en este ejemplo, PID es "8308"):

    taskkill / pid 8308 / f

Captura de pantalla

ingrese la descripción de la imagen aquí


1
explicación sólida.
Joe Healy

19

Cuando recibe un error Error: escuche EADDRINUSE,

Intente ejecutar los siguientes comandos de shell:

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

Me grepED para 8080, porque sé que mi servidor está ejecutando en el puerto 8080. ( staticme dice cuando lo comienzo: 'servir a '' http://127.0.0.1:8080 '.) Es posible que tenga que buscar un diferente Puerto.


1
¡Al final! Una respuesta que busca por puerto, en lugar de por proceso. ¡No es solo el nodo el que puede bloquear un puerto!
Michael Scheper

Produje un módulo para detectar qué proceso en ejecución está bloqueando un puerto, llamado porthog . Básicamente, ejecuta el código anterior.
Corey

15

suponga que su servidor se está ejecutando en 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)

después de ese uso kill -9 <pid>

en el caso anterior sudo kill -9 11716


12

use el siguiente comando para matar un proceso que se ejecuta en un determinado puerto: 3000 en este ejemplo a continuación

kill -9 $(lsof -t -i:3000)

7

Una posible solución que funcionó para mí fue simplemente cerrar la ventana en el navegador donde tenía el correspondiente script " http: // localhost: 3000 / " ejecutándose.


Sí, la ventana del navegador aún abierta es un problema común con los puertos de host local :-)
Dave Everitt

7

Verifique el ID del proceso

sudo lsof -i: 8081

Que matar el proceso particular

sudo kill -9 2925

ingrese la descripción de la imagen aquí


6

Cuando recibes un error

Error: escucha EADDRINUSE

Abra el símbolo del sistema y escriba las siguientes instrucciones:

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

Después de eso, reinicie la interfaz de la brecha del teléfono.

Si desea saber qué ID de proceso está usando phonegap, abra TASK MANAGER y mire el encabezado de columna PID y busque el número de PID.


No pude hacer que taskkill funcionara, así que abrí el administrador de tareas y agregué el PID y lo maté allí gracias
Tom Stickel

5

El killall -9nodo mencionado anteriormente , sugerido por Patrick, funciona como se esperaba y resuelve el problema, pero es posible que desee leer la parte de edición de esta misma respuesta sobre por qué kill -9puede que no sea la mejor manera de hacerlo.

Además de eso, es posible que desee apuntar a un solo proceso en lugar de matar ciegamente todos los procesos activos.

En ese caso, primero obtenga el ID de proceso (PID) del proceso que se ejecuta en ese puerto (digamos 8888):

lsof -i tcp:8888

Esto devolverá algo como:

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

(ESCUCHA) Entonces hazlo (pd - en realidad no. Sigue leyendo a continuación):

kill -9 57385

4

Esto funciona en Mac:

Paso 1.

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

El comando anterior le dará los Id. De proceso que actualmente contienen el puerto.

Paso 2.

Kill -9 <pid>

3

puede cambiar su puerto en app.js o en el archivo de configuración de su proyecto.

predeterminado ('puerto', 80)

y para ver si el puerto 80 ya está en uso, puede hacer

netstat -antp | grep 80

netstat -antp | nodo grep

es posible que desee ver si el proceso de nodo ya se está ejecutando o no.

ps -ef | nodo grep

y si encuentra que ya se está ejecutando, puede matarlo usando

nodo de killall


1

Creé 2 servidores, escuchando en el mismo puerto 8081, corriendo desde el mismo código, mientras aprendía

La creación del primer servidor ha funcionado, la creación del segundo servidor falló con EADDRINUSE

Los retrasos en la devolución de llamada de node.js pueden ser la razón detrás de que no funcionó, o la creación del segundo servidor tuvo una excepción y el programa salió, por lo que el primer servidor también está cerrado

2 sugerencia de problema del servidor, obtuve de: ¿Cómo solucionar el error: escuchar EADDRINUSE mientras usa nodejs?


1

Error: escuche EADDRINUSE para resolverlo en Ubuntu, ejecute en la terminal netstat -nptl y luego este kill -9 {process-number}comando es para matar el proceso del nodo y ahora puede intentar ejecutar nuevamente el comando node server.js

Ex

escuchar 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 / node
tcp6 0 0 ::: 20080 ::: * LISTEN 9660 / java
tcp6 0 0 ::: 80 ::: * LISTEN -
tcp6 0 0 ::: 22 ::: * LISTEN -
tcp6 0 0 ::: 10137 ::: * ESCUCHAR 9660 / java

matar -9 10401


2
El usuario dijo que está en Windows. En Windows netstatrecibe diferentes parámetros. netstat -a -p tcp -b -vgeneraría el nombre del proceso.
arbóreo84

0

Tengo el nodo rojo instalado en mi Mac y mi Raspberry Pi. Tuve exactamente el mismo problema y hacer 'killall' no ayudó. Una vez que apagué la Raspberry Pi y reinicié mi computadora, funcionó bien.


0

Es posible que haya intentado ejecutar el comando npm start en dos pestañas diferentes. No puede ejecutar npm start cuando ya se está ejecutando en alguna pestaña. Compruébelo una vez.


Proporcione más detalles.
DeshDeep Singh

0

Para cualquiera que haya probado todo lo anterior, pero aún no pueda encontrar el proceso de rouge, inténtelos todos de nuevo, pero asegúrese de incluir "sudo" delante de los comandos.


0

Si le gusta más la interfaz de usuario, busque el proceso Node.js en el administrador de tareas de Windows y elimínelo.


0

ps -ef | nodo grep encuentra app.js, elimina el pid de app.js


0

simplemente mata el nodo como nodo pkill -9 en la terminal de ubantu que inicia el nodo


0

Deberá eliminar el puerto intentando usar el siguiente comando en la terminal

$ sudo killall -9 nodejs

0

[RESUELTO]

Puede que sea demasiado tarde, pero está funcionando a la perfección.

Necesitas pm2estar instalado

npm install -g pm2

Para detener el servidor en ejecución actual (server.js):

pm2 stop -f server.js

0

Resolví este problema agregando a continuación en mi package.json para matar PORT activo - 4000 (en mi caso) Ejecutando en WSL2 / Linux / Mac

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

Fuente


-1

Para matar el servidor de nodos, primero ejecute este comando en su terminal:

  1. top
  2. abra otra ventana y luego copie el servidor idde la ventana anterior: PID number -9 kill así que ahora mató su servidor de nodo, intente nuevamente ejecutar su aplicación.

-1

Usé el comando netstat -ano | grep "portnumber"para enumerar el número de puerto / PID para ese proceso. Luego, puede usar taskkill -f //pid 111111para matar el proceso, siendo el último valor el pid que encuentre en el primer comando.

Un problema con el que me encuentro a veces es la reaparición del nodo incluso después de finalizar el proceso, por lo que tengo que usar el antiguo administrador de tareas para eliminar manualmente el proceso del nodo.


-4

En la ventana, ejecute este comando:

taskkill /F /PID 1952

1
1952 es una variable. El proceso para matar puede tener una identificación diferente.
Diseño de Adrian
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.