arrêter toutes les instances du serveur node.js


186

C'est la première fois que je travaille avec Node.js et j'ai rencontré ce problème:

J'ai démarré un serveur Node via le plugin d'un IDE. Malheureusement, je ne peux pas utiliser le terminal de l'IDE. J'ai donc essayé d'exécuter le script à partir de la ligne de commande.

C'est le problème - j'utilise le module Express et mon application écoute un port (8080). Lorsque je démarre l'application à partir de la ligne de commande, cela génère cette erreur:

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)

Même si je ne suis pas très sûr de la nature de cette erreur, j'ai supposé que c'était parce que l'application écoutait sur un port déjà utilisé. Alors j'ai fait:

netstat -an

je vois

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

C'est parce que le serveur Node est déjà démarré lorsque j'ai essayé de le démarrer à partir de l'EDI.

Alors je veux savoir, comment puis-je arrêter toutes les instances de serveur? Aussi si vous pouvez me dire comment détecter ce qui tourne sur un port et le tuer.


1
Désolé je ne mentionne pas que je suis sur environnement windows Veuillez poster des commandes pertinentes. Merci
Kiran Ambati

et vous pouvez également trouver la tâche node.js dans votre gestionnaire de tâches Windows. trouver la progression dont le nom est Node.js: côté serveur ... et ouvrir ses informations détaillées, vous trouverez le pid et le détail de la progression de votre nodejs
Xiuying Lan

C'est celui qui a fonctionné pour moi: superuser.com/questions/1183057/…
inconnu

Réponses:


422

Machine Windows:

Vous devez tuer un serveur Node.js, et vous n'avez aucun autre processus Node en cours d'exécution, vous pouvez dire à votre machine de tuer tous les processus nommés node.exe. Cela ressemblerait à ceci:

taskkill /im node.exe

Et si les processus persistent, vous pouvez forcer les processus à se terminer en ajoutant l' /findicateur:

taskkill /f /im node.exe

Si vous avez besoin d'un contrôle plus fin et que vous ne devez tuer qu'un serveur qui s'exécute sur un port spécifique, vous pouvez utiliser netstatpour trouver l'ID de processus, puis lui envoyer un signal d'arrêt. Donc, dans votre cas, où se trouve le port 8080, vous pouvez exécuter ce qui suit:

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

La cinquième colonne de la sortie est l'ID de processus:

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

Vous pouvez alors tuer le processus avec taskkill /pid 14828. Si le processus refuse de se terminer, ajoutez simplement le /fparamètre (force) à la commande.


Machine Linux:

Le processus est presque identique. Vous pouvez soit tuer tous les processus Node en cours d'exécution sur la machine (à utiliser -$SIGNALsi SIGKILLc'est insuffisant):

killall node

Ou également en utilisant netstat, vous pouvez trouver le PID d'un processus en écoute sur un port:

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

L'ID de processus dans ce cas est le numéro avant le nom du processus dans la sixième colonne, que vous pouvez ensuite passer à la killcommande:

$ kill 1073

Si le processus refuse de se terminer, utilisez simplement l' -9indicateur, qui est un SIGTERMet ne peut pas être ignoré:

$ kill -9 1073

1
désolé, comment utiliser exactement ces commandes? process.exit () pourrait être dans le code? mais le serveur est déjà démarré. Il est probable qu'il soit démarré avec le nœud de commande app.js mais pas avec le nœud-dev app.js. Et "node killall" ne fonctionne pas. Est-ce que je fais mal? Merci
Kiran Ambati

1
process.exit()dans votre application provoque la fermeture de l'instance NodeJS. killall nodedans bash tuerait toutes les instances NodeJS exécutées sur votre machine.
hexacyanide

merci @hexacyanide. Je développe sous windows. Est-ce que cela rend killall node une commande invalide car je ne peux pas l'utiliser à partir de la ligne de commande.
Kiran Ambati

3
Essayez taskkill /IM node.exe. Il tuera tous les processus nommés node.exe.
hexacyanide

1
J'ai dû utiliser taskkill / F / IM node.exe pour le faire fonctionner, merci!
Luis

75

Le moyen le plus rapide est

killall node

Fonctionne avec Linux, OS X


Méthode simple, mais si une autre application est en cours d'exécution, nous devons être plus précis.
Rajeev Uppala

ne fonctionne pas pour moi. node: no process foundDe plus, lorsque je grep pour un nœud de processus qui s'exécutent sur le port spécifique, l'ID de processus a -au lieu d'un numéro lui-même.
Giorgi Gvimradze

49

Vous pouvez utiliser lsofget le processus lié au port requis.

Malheureusement, les indicateurs semblent être différents selon le système, mais sur Mac OS X, vous pouvez exécuter

lsof -Pi | grep LISTEN

Par exemple, sur ma machine, j'obtiens quelque chose comme:

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)

Le deuxième numéro est le PID et le port qu'ils écoutent se trouve à droite avant "(LISTEN)". Trouvez le PID voyou et kill -9 $PIDterminez avec des préjugés extrêmes.


Salut Jacob, pouvez-vous modifier la réponse et ajouter la version Windows car je développe sur Windows. Merci
Kiran Ambati

Je ne sais pas comment le faire sur Windows, désolé Kiran.
Jacob Groundwater

C'est une excellente réponse, en particulier lorsqu'il y a plusieurs serveurs de nœuds exécutés sur différents ports. Je peux facilement distinguer les ID de processus en cours d'exécution sur chaque port.
modulitos

25

Terminal Windows et GitBash J'avais besoin d'utiliser cette commande dans le terminal Windows / Webstorm / GitBash

cmd "/C TASKKILL /IM node.exe /F"

3
Celui-ci l'a fait pour moi. Merci
Adim Victor

1
Celui-ci l'a fait aussi pour moi. J'ai trouvé le moyen le plus rapide de tuer tous les processus de nœuds sous Windows.
Asad

17

si vous souhaitez tuer un processus de nœud spécifique, vous pouvez accéder à la ligne de commande et saisir:

ps aux | grep node

pour obtenir une liste de tous les ID de processus de nœud. maintenant vous pouvez obtenir votre identifiant de processus (pid), puis faites:

kill -9 PID

et si vous voulez tuer tous les processus de nœud, faites:

killall -9 node

Le commutateur -9 est comme la tâche de fin sur Windows. cela forcera la fin du processus. tu peux faire:

kill -l

pour voir tous les commutateurs de la commande kill et leurs commentaires.


8

Vous pouvez essayer ceci:

taskkill /IM node.exe -F

7

Linux

Pour impressionner vos amis

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

Mais c'est celui dont tu te souviendras

killall node


2

Si vous utilisez Windows, procédez comme suit:

  1. Ouvrez le gestionnaire de tâches, recherchez ce processus: Gestionnaire de tâches montrant le processus de nœud - JavaScript côté serveur Node.js

  2. Ensuite, faites un clic droit et "Fin de tâche".

  3. Voilà, maintenant toutes les commandes npm s'exécutent depuis le début.


1

Multiplateforme, stable, meilleure solution:

utilisez fkill pour tuer le processus qui prend votre port:

fkill -f :8080

Pour installer fkill, utilisez la commande: npm i -g fkill


1

tu peux essayer

killall node

tu peux aussi essayer

killall nodejs

Ces commandes ont déjà été publiées plusieurs fois. Vous pouvez les publier à nouveau, mais vous devriez au moins ajouter des explications supplémentaires à votre réponse afin que les autres puissent en tirer des leçons
Nico Haase


0

J'utilise le système d'exploitation Windows.

J'ai tué tout le processus de nœud et redémarré l'application, cela fonctionnait.

essayer

taskkill /im node.exe

0

Utilisez la commande suivante pour tuer et redémarrer le serveur de nœuds à partir du fichier de commandes

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


-3

Appuyez sur cmd ou bash: Ctrl + C


Cela ne fonctionne que dans la vue du terminal avec le processus de nœud en cours d'exécution et ne garantit pas non plus de tuer le processus.
Design by Adrian le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.