Tengo un servidor simple ejecutándose en node.js usando connect:
var server = require('connect').createServer();
//actions...
server.listen(3000);
En mi código tengo controladores reales, pero esa es la idea básica. El problema que sigo teniendo es
EADDRINUSE, Address already in use
Recibo este error cuando vuelvo a ejecutar mi aplicación después de que se bloqueó o produjo errores anteriormente. Como no estoy abriendo una nueva instancia de terminal, cierro el proceso con ctr + z
.
Estoy bastante seguro de que todo lo que tengo que hacer es cerrar el servidor o la conexión. He intentado llamar server.close()
en process.on('exit', ...);
sin suerte.
Ctrl + z
utilizarlo, debeCtrl + c
cerrar el programa correctamente enviando SIGQUIT :) Consulte la wiki para obtener más detalles :)pkill nodejs
opkill node
en un sistema operativo tipo UNIXRespuestas:
process.on('exit', ..)
no se llama si el proceso se bloquea o se mata. Solo se llama cuando finaliza el bucle de eventos y desdeserver.close()
tipo de extremos del bucle de eventos (que todavía tiene que esperar para el funcionamiento de pilas actualmente aquí y allí) no tiene sentido para poner que dentro del evento de salida ...En caso de accidente, haz
process.on('uncaughtException', ..)
y kill kill doprocess.on('SIGTERM', ..)
Dicho esto, SIGTERM (señal de apagado predeterminada) permite que la aplicación se limpie, mientras que SIGKILL (finalización inmediata) no permite que la aplicación haga nada.
fuente
También puede ir a la ruta de la línea de comando:
para obtener los identificadores de proceso.
Entonces:
Hacer el -9 al matar envía un SIGKILL (en lugar de un SIGTERM). SIGTERM ha sido ignorado por el nodo para mí a veces.
fuente
ps aux | grep node
no muestra nada; todavíatextareaserver --editor-cmd='gvim -f'
falla: 14 de marzo 21:19:30 - socket.io listo - aceptando conexiones Ahora podría iniciar el servidor: EADDRINUSE, dirección ya en usokillall -9 node
pidof
también es útillsof -n -i4TCP:8000 | grep LISTEN | tr -s ' ' | cut -f 2 -d ' ' | xargs kill -9
kill
con la identificación de proceso específica en lugar dekillall
.Primero, querrá saber qué proceso está utilizando
port 3000
esto mostrará una lista de todos los PID que escuchan en este puerto, una vez que tenga el PID puede terminarlo con lo siguiente:
fuente
ps aux | grep node
para mí. Tampoco lo necesitabasudo
sudo
.killall -9 {COMMAND}
por ejemplokillall -9 node
Golpeé esto en mi computadora portátil con win8. Esto funcionó.
Ejecute cmd.exe como 'Administrador':
fuente
taskkill /F /IM node.exe
funciona como un encanto para mí en Windows desde cualquier directorio :-) ¡Gracias por compartir!Verifique el PID, es decir, la identificación del proceso que se ejecuta en el puerto 3000 con el siguiente comando:
Saldría algo como lo siguiente:
Ahora elimine el proceso usando:
fuente
Encontré esta solución, pruébalo
sudo
fuente
ps aux | grep node
Linux
Ejecute
ps
y determine el PID de su proceso de nodo.Entonces corre
sudo kill PID
Ventanas
Utilice la lista de tareas para mostrar la lista de procesos en ejecución:
Luego, elimine el proceso del nodo de esta manera (usando el PID obtenido del
tasklist
comando):fuente
taskkill //IM node.exe
y acabo de matar a node. trabajó.Aquí hay un trazador de líneas (reemplace 3000 con un puerto o una variable de configuración):
fuente
Recibí este error una vez y tomé muchos de los enfoques aquí.
Mi problema fue que tenía dos
app.listen(3000);
llamadas en el mismo script app.js. La primera aplicación.listen () tuvo éxito donde la segunda arrojó el error.Otro comando útil que encontré que me ayudó a depurar fue el
sudo fuser -k 3000/tcp
que eliminará cualquier proceso no autorizado que pueda haber iniciado (algunos procesos pueden reiniciarse, por ejemplo, si se ejecuta con forever.js, pero fue útil para mí).fuente
npm start
Para Windows, abra el Administrador de tareas y encuentre los procesos node.exe. Mátalos a todos con End Task.
fuente
Descripción:
fuente
Para su información, puede matar el proceso con un solo comando
sudo fuser -k 3000/tcp
. Esto se puede hacer para todos los demás puertos como 8000, 8080 o 9000 que se usan comúnmente para el desarrollo.fuente
Usuarios de PowerShell:
fuente
Primero descubra lo que se está ejecutando usando:
Obtendrás algo como:
Entonces puedes matar el proceso de la siguiente manera:
Entonces podrá ejecutar sin obtener el EADDRINUSE de escucha ::: 3000 errores
fuente
Para Visual Studio Noobs como yo
¡Puede estar ejecutando el proceso en otras terminales!
Después de cerrar el terminal en Visual Studio , el terminal simplemente desaparece .
Creé manualmente uno nuevo pensando que el anterior fue destruido. En realidad, cada vez que hacía clic en Nueva Terminal , en realidad estaba creando una nueva además de las anteriores .
Así que localicé la primera terminal y ... Voila, estaba ejecutando el servidor allí.
fuente
Administrador de tareas (ctrl + alt + del) ->
Pestaña Procesos ->
seleccione el proceso "node.exe" y presione "Finalizar proceso"
fuente
Puede encontrarse con escenarios en los que incluso matar el hilo o el proceso en realidad no terminará la aplicación (esto me sucede en Linux y Windows de vez en cuando). En ocasiones, es posible que ya tenga una instancia ejecutándose que no cerró.
Como resultado de ese tipo de circunstancias, prefiero agregar a mi
package.json
:Entonces puedo llamarlos usando:
Puede ser más elegante y hacer esos comandos BIN con un indicador de argumento si lo desea. También puede agregarlos como comandos para ejecutar dentro de una cláusula try-catch.
fuente
En usuarios de Windows: abrir
task manager
yend task
elnodejs.exe
archivo, funciona bien.fuente
Puede usar hot-node para evitar que su servidor falle / errores en tiempo de ejecución. Hot-node reinicia automáticamente la aplicación nodejs por usted cada vez que hay un cambio en el programa de nodo [fuente] / proceso [programa de nodo en ejecución].
Instale hot-node usando npm usando la opción global:
fuente
Con el debido respeto a todas las respuestas en el formulario, me gustaría agregar un punto.
Descubrí que cuando finalizo una aplicación de nodo por error usando Ctrl + Z, la próxima vez que trato de abrirla tengo el mismo error EADDRINUSE.
Cuando uso Ctrl + C para terminar una aplicación de nodo, la próxima vez que la abrí, funcionó sin problemas.
Cambiar el número de puerto a otro diferente al error resolvió el problema.
fuente
fg
en esa misma consola. Luego puede ver lo que sucede en ese servidor después de haber escrito varios comandos en la línea de comandos.En Linux
Añadir función a
~/.bashrc
:Tire de los cambios:
source ~/.bashrc
Y úsalo:
killTcpListen 3000
fuente
Por si acaso, compruebe si ha agregado esta línea varias veces por error
El código anterior es para express, pero solo verifique si está intentando usar el mismo puerto dos veces en su código.
fuente
Win10, git bash v2.15, nodo v8.9.1, npm v5.5.1
Tenía un script package.json para iniciar el nodo:
"start": "node index.js"
Cada vez que usé esto, independientemente de si lo maté con ctrl + c, me encontré con este problema.
Si solo corrí
node index.js
de git bash en lugar denpm run start
matar con ctrl + c, nunca obtuve este error.No estoy seguro de por qué, pero pensé que esto podría ayudar a alguien.
fuente
Solución de interfaz de usuario para usuarios de Windows: descubrí que las respuestas principales no me funcionaban, parecían ser comandos para usuarios de Mac o Linux. Encontré una solución simple que no requería ningún comando para recordar: abrir el Administrador de tareas (ctrl + shift + esc). Mira los procesos en segundo plano en ejecución. Encuentra cualquier cosa Node.js y finaliza la tarea.
Después de hacer esto, el problema desapareció para mí. Como se indicó en otras respuestas, los procesos en segundo plano todavía se están ejecutando porque anteriormente se encontró un error y no se llamaron a las funciones regulares de salida / limpieza, por lo que una forma de eliminarlas es encontrar el proceso en el Administrador de tareas y eliminarlo allí . Si ejecutó el proceso desde un terminal / powerShell, generalmente puede usar ctrl + c para matarlo.
fuente
Reescribiendo el comentario de @Gerard en mi respuesta:
Pruébalo
pkill nodejs
opkill node
si es como UNIX operativo .Esto matará el proceso que ejecuta el servidor de nodo que se ejecuta en cualquier puerto. Trabajó para mi.
Namaste🙏
fuente
Node se está ejecutando en algún lugar de la memoria y tiene ese puerto bloqueado. En Windows, este problema ocurrirá, como la mayoría de los problemas de Windows, se resolverá presionando CTRL+ ALT+ DELy / o reiniciando.
fuente
Las razones de estos problemas son:
fuente
server.close () tarda un tiempo en cerrar la conexión, por lo tanto, deberíamos hacer esto una llamada asincrónica como tal:
IMPORTANTE: al usar await , debemos usar la palabra clave asíncrona en nuestra función de encapsulación como tal:
fuente
Use el siguiente comando en el terminal / cmd para cambiar el puerto (npm run dev es para node.js), puede tener otros comandos para ejecutar su aplicación, la mayoría de ellos funcionará mientras cambia el puerto, más fácil y más rápido. Además, puede usar cualquier número de puerto que esté libre en su sistema en lugar de 3002
La mayoría de las veces cuando uno ejecuta el proyecto mientras sale de él de forma abrupta o sin saberlo, presiona control + z que le da la salida del puerto, siempre elija control + c que no saldrá del puerto para ejecutar el servidor o el proyecto.
Además, es hora de cambiar el número de puerto en su código
fuente
Esto significa que tiene dos servidores de nodo que se ejecutan en el mismo puerto, si uno se ejecuta en el puerto, digamos 3000, cambie el otro a otro puerto, digamos 3001, y todo funcionará bien
fuente