detener todas las instancias del servidor node.js

186

Esta es la primera vez que trabajo con Node.js y me encontré con este problema:

He iniciado un servidor Node a través del complemento de un IDE. Desafortunadamente, no puedo usar la terminal del IDE. Así que intenté ejecutar el script desde la línea de comando.

Este es el problema: estoy usando el módulo Express y mi aplicación está escuchando algún puerto (8080). Cuando inicio la aplicación desde la línea de comandos, arroja este error:

events.js:71
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: listen EADDRINUSE
    at errnoException (net.js:770:11)
    at HTTPServer.Server._listen2 (net.js:910:14)
    at listen (net.js:937:10)
    at HTTPServer.Server.listen (net.js:986:5)
    at Object.<anonymous> (C:\xampp\htdocs\node\chat\app.js:5:5)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)

Aunque no estoy muy seguro de cuál podría ser este error, supuse que es porque la aplicación está escuchando en un puerto que ya está en uso. Así que lo hice:

netstat -an

puedo ver

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

Es porque el servidor Node ya se inició cuando intenté iniciarlo desde el IDE.

Entonces, quiero saber, ¿cómo puedo detener todas las instancias del servidor? Además, si puede decirme cómo detectar lo que se está ejecutando en un puerto y matarlo.

Kiran Ambati
fuente
1
Lamento no mencionar que estoy en el entorno de Windows. Por favor, publique comandos que sean relevantes. Gracias
Kiran Ambati
y también puede encontrar la tarea node.js en su administrador de tareas de Windows. encontrar el progreso cuyo nombre es Node.js: del lado del servidor ... y abrirlo de información de detalle, se encuentra el PID y el detalle de sus nodejs progreso
Xiuying Lan
Este es el que funcionó para mí: superuser.com/questions/1183057/...
unnknown

Respuestas:

422

Máquina de Windows:

Necesita matar un servidor Node.js, y no tiene otros procesos Node ejecutándose, puede decirle a su máquina que mate todos los procesos nombrados node.exe. Eso se vería así:

taskkill /im node.exe

Y si los procesos aún persisten, puede forzar la finalización de los procesos agregando el /findicador:

taskkill /f /im node.exe

Si necesita un control más detallado y solo necesita matar un servidor que se ejecuta en un puerto específico, puede usarlo netstatpara encontrar la ID del proceso y luego enviarle una señal de cierre. Entonces, en su caso, donde está el puerto 8080, puede ejecutar lo siguiente:

C:\>netstat -ano | find "LISTENING" | find "8080"

La quinta columna de la salida es la ID del proceso:

  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       14828
  TCP    [::]:8080              [::]:0                 LISTENING       14828

Entonces podrías matar el proceso con taskkill /pid 14828. Si el proceso se niega a salir, simplemente agregue el /fparámetro (force) al comando.


Máquina Linux:

El proceso es casi idéntico. Puede matar todos los procesos de Nodo que se ejecutan en la máquina (usar -$SIGNALsi SIGKILLes insuficiente):

killall node

O también usando netstat, puede encontrar el PID de un proceso escuchando en un puerto:

$ netstat -nlp | grep :8080
tcp        0      0 0.0.0.0:8080         0.0.0.0:*                   LISTEN      1073/node

La ID del proceso en este caso es el número antes del nombre del proceso en la sexta columna, que luego puede pasar al killcomando:

$ kill 1073

Si el proceso se niega a salir, simplemente use la -9bandera, que es una SIGTERMy no se puede ignorar:

$ kill -9 1073
hexacianuro
fuente
1
lo siento, ¿cómo exactamente puedo usar estos comandos? ¿process.exit () podría estar en el código? pero el servidor ya está iniciado. Es probable que se inicie con el nodo de comando app.js pero no con node-dev app.js. Y "node killall" no funciona. ¿Lo estoy haciendo mal? Gracias
Kiran Ambati
1
process.exit()en su aplicación hace que la instancia de NodeJS se cierre. killall nodeen bash mataría todas las instancias de NodeJS que se ejecutan en su máquina.
hexacianuro
gracias @hexacyanide. Estoy desarrollando en windows. ¿Eso hace que el nodo killall sea un comando no válido porque no puedo usarlo desde la línea de comandos?
Kiran Ambati
3
Tratar taskkill /IM node.exe. Matará todos los procesos nombrados node.exe.
hexacianuro
1
Tuve que usar taskkill / F / IM node.exe para que funcione, ¡gracias!
Luis
75

La forma más rápida es

killall node

Funciona con Linux, OS X

zag2art
fuente
Método fácil, pero si se está ejecutando cualquier otra aplicación, entonces tenemos que ser más específicos.
Rajeev Uppala
no funciona para mi node: no process foundAdemás, cuando busco los procesos de un nodo que se ejecutan en el puerto específico, el ID del proceso tiene en -lugar de un número.
Giorgi Gvimradze
49

Puede usar lsofobtener el proceso que se ha vinculado al puerto requerido.

Lamentablemente, los indicadores parecen ser diferentes según el sistema, pero en Mac OS X puede ejecutar

lsof -Pi | grep LISTEN

Por ejemplo, en mi máquina obtengo algo como:

mongod     8662 jacob    6u  IPv4 0x17ceae4e0970fbe9      0t0  TCP localhost:27017 (LISTEN)
mongod     8662 jacob    7u  IPv4 0x17ceae4e0f9c24b1      0t0  TCP localhost:28017 (LISTEN)
memcached  8680 jacob   17u  IPv4 0x17ceae4e0971f7d1      0t0  TCP *:11211 (LISTEN)
memcached  8680 jacob   18u  IPv6 0x17ceae4e0bdf6479      0t0  TCP *:11211 (LISTEN)
mysqld     9394 jacob   10u  IPv4 0x17ceae4e080c4001      0t0  TCP *:3306 (LISTEN)
redis-ser 75429 jacob    4u  IPv4 0x17ceae4e1ba8ea59      0t0  TCP localhost:6379 (LISTEN)

El segundo número es el PID y el puerto que están escuchando está a la derecha antes de "(ESCUCHAR)". Encuentra el PID falso y kill -9 $PIDtermina con prejuicios extremos.

Jacob Groundwater
fuente
Hola Jacob, por favor, ¿puedes editar la respuesta y agregar la versión de Windows porque estoy desarrollando en Windows? Gracias
Kiran Ambati
No tengo idea de cómo hacerlo en Windows, lo siento Kiran.
Jacob Groundwater
Esta es una gran respuesta, especialmente cuando hay múltiples servidores de nodos ejecutándose en diferentes puertos. Puedo distinguir fácilmente la identificación del proceso que se ejecuta en cada puerto.
modulitos
25

Terminal de Windows y GitBash Necesitaba usar este comando dentro del terminal de Windows / Webstorm / GitBash

cmd "/C TASKKILL /IM node.exe /F"
Enkode
fuente
3
Este lo hizo por mí. Gracias
Adim Victor
1
Este también lo hizo por mí. Encontré la forma más rápida de matar todos los procesos de nodo en Windows.
Asad
17

si desea eliminar un proceso de nodo específico, puede ir a la ruta de la línea de comando y escribir:

ps aux | grep node

para obtener una lista de todos los identificadores de proceso de nodo. ahora puede obtener su identificación de proceso (pid), luego haga:

kill -9 PID

y si desea eliminar todos los procesos de nodo, haga lo siguiente:

killall -9 node

-9 interruptor es como finalizar la tarea en Windows. obligará a que finalice el proceso. tu puedes hacer:

kill -l

para ver todos los interruptores del comando kill y sus comentarios.

Ali_Hr
fuente
8

Puedes probar esto:

taskkill /IM node.exe -F

fuente
7

Linux

Para impresionar a tus amigos

ps aux | grep -i node | awk '{print $2}' | xargs  kill -9

Pero este es el que recordarás

killall node
Alex Nolasco
fuente
3

También puedes probar:

killall nodejs

Emeka Mbah
fuente
2

Si está utilizando Windows, siga esto:

  1. Abra el administrador de tareas, busque este proceso: Administrador de tareas que muestra el proceso Node - Node.js JavaScript del lado del servidor

  2. Luego haga clic derecho y "Finalizar tarea".

  3. Eso es todo, ahora todos los comandos npm se ejecutan desde el inicio.

Neil Bannet
fuente
1

Multiplataforma, estable, la mejor solución:

use fkill para matar el proceso que está tomando su puerto:

fkill -f :8080

Para instalar fkill use el comando: npm i -g fkill

Dariusz Filipiak
fuente
1

puedes probar

killall node

también puedes probar

killall nodejs
Sultan Ali
fuente
Estos comandos ya se han publicado varias veces. Está bien publicarlos nuevamente, pero al menos debería agregar más explicaciones a su respuesta para que otros puedan aprender de ella
Nico Haase
1

funciona bien en windows 10

taskkill /f /im node.exe
Thavaprakash Swaminathan
fuente
0

Estoy usando el sistema operativo Windows.

Maté todo el proceso de nodo y reinicié la aplicación que funcionó.

tratar

taskkill /im node.exe
Sathya Baman
fuente
0

Use el siguiente comando para matar y reiniciar el servidor de nodo desde el archivo por lotes

    @echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF
Samadhan Virkar
fuente
0

en el comando de Windows Escriba el comando golpe:

taskkill / f / im node.exe

Hossein Kohzadi
fuente
-3

Presione cmd o bash: Ctrl + C

Altynbek S.
fuente
Esto solo funciona en la vista de terminal con el proceso del nodo en ejecución, y tampoco garantiza matar el proceso.
Diseño de Adrian el