268 votes

arrêter toutes les instances du serveur node.js

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.

Voici le problème : j'utilise le module Express et mon application écoute un port (8080). Lorsque je lance l'application à partir de la ligne de commande, l'erreur suivante apparaît :

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)

Bien que je ne sois pas très sûr de l'origine de cette erreur, j'ai supposé que c'est parce que l'application écoute sur un port déjà utilisé. C'est ce que j'ai fait :

netstat -an

Je peux voir

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 lancer depuis l'IDE.

Je veux donc savoir comment arrêter toutes les instances du serveur. De même, si vous pouvez me dire comment détecter ce qui fonctionne sur un port et l'arrêter.

593voto

hexacyanide Points 15723

Machine Windows :

Vous avez besoin de tuer un serveur Node.js, et vous n'avez pas d'autres 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 les forcer à se terminer en ajoutant l'option /f drapeau :

taskkill /f /im node.exe

Si vous avez besoin d'un contrôle plus fin et que vous souhaitez tuer uniquement un serveur fonctionnant sur un port spécifique, vous pouvez utiliser la commande netstat pour trouver l'ID du processus, puis lui envoyer un signal d'arrêt. Donc dans votre cas, où le port est 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 du 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 sortir, il suffit d'ajouter l'instruction /f (force) à la commande.


Machine MacOS :

Le processus est presque identique. Vous pouvez soit tuer tous les processus Node fonctionnant sur la machine :

killall node

Ou encore, comme il est fait allusion dans La réponse de @jacob-groundwater ci-dessous en utilisant lsof vous pouvez trouver le PID d'un processus qui écoute sur un port (passez la touche -i et le port pour accélérer de manière significative ce processus) :

$ lsof -Pi :8080
COMMAND   PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     1073    urname   22u  IPv6  bunchanumbershere      0t0  TCP *:8080 (LISTEN)

Dans ce cas, l'ID du processus est le numéro qui se trouve sous la colonne PID, que vous pouvez ensuite transmettre à la fonction kill commandement :

$ kill 1073

Si le processus refuse de sortir, il suffit d'utiliser la commande -9 qui est un SIGTERM et ne peuvent être ignorées :

$ kill -9 1073

Machine Linux :

Là encore, le processus est presque identique. Vous pouvez soit tuer tous les processus Node en cours d'exécution sur la machine (utiliser la commande -$SIGNAL si SIGKILL est insuffisante) :

killall node

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

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

Dans ce cas, l'ID du processus est le numéro précédant le nom du processus dans la sixième colonne, que vous pouvez ensuite transmettre à la fonction kill commandement :

$ kill 1073

Si le processus refuse de sortir, il suffit d'utiliser la commande -9 qui est un SIGTERM et ne peuvent être ignorées :

$ kill -9 1073

109voto

zag2art Points 147

Fonctionne pour Linux, OS X

killall node

56voto

Jacob Groundwater Points 2346

Vous pouvez utiliser lsof obtenir le processus qui s'est lié au port requis.

Malheureusement, les drapeaux 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 chiffre est le PID et le port qu'ils écoutent est à droite avant "(LISTEN)". Trouvez le PID et kill -9 $PID de mettre fin à la relation avec un préjudice extrême.

36voto

Enkode Points 48

Windows et le terminal GitBash Je devais utiliser cette commande dans le terminal Windows / Webstorm / GitBash.

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

22voto

Ali_Hr Points 171

Si vous voulez tuer un processus de nœud spécifique, vous pouvez aller à la ligne de commande et taper :

ps aux | grep node

pour obtenir une liste de tous les identifiants de processus de nœuds. Vous pouvez maintenant obtenir votre identifiant de processus (pid), puis faites :

kill -9 PID

et si vous voulez tuer tous les processus de nœuds, faites-le :

killall -9 node

Le commutateur -9 est comme la tâche de fin sur Windows. Il forcera le processus à se terminer. vous pouvez le faire :

kill -l

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X