133 votes

comment libérer localhost de l'erreur : listen EADDRINUSE

Je teste un serveur écrit en nodejs sur Windows 7. et lorsque j'essaie d'exécuter le testeur en ligne de commande, j'obtiens l'erreur suivante

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

comment puis-je le réparer sans redémarrer ?

9 votes

sudo killall node peut être utile

170voto

Komposr Points 330

Cours :

ps -ax | grep node

Vous obtiendrez quelque chose comme :

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

Alors, faites-le :

kill -9 60778

0 votes

Merci ! Fonctionne sur ma machine !

0 votes

Merci. C'est ce dont j'avais besoin. J'avais installé pm2 qui démarre automatiquement l'application node quand elle est fermée. J'ai dû désactiver pm2 pour démarrer automatiquement node.

0 votes

Travaux ! Merci beaucoup

100voto

DeaDEnD Points 6890

Cela signifie que l'adresse à laquelle vous essayez de lier le serveur est utilisée. Essayez un autre port ou fermez le programme qui utilise ce port.

0 votes

Je ne pouvais rien trouver en utilisant le port 3000, mais le changer a fonctionné !

8 votes

Comme ce programme de nœud unique est la seule chose qui utilise le port 3000 sur ma machine, il semble assez clair que quelque chose s'est produit pour empêcher l'instanciation précédente de mon processus de nœud de s'arrêter correctement. Cela fonctionnait lorsque j'utilisais node app.js et l'ai arrêté avec Ctrl+C, mais j'ai commencé à avoir le problème EADDRINUSE après la première fois que j'ai utilisé npm start Il semble donc que la vraie solution serait d'utiliser autre chose que Ctrl+C pour s'éteindre après avoir utilisé npm start .

0 votes

Votre npm start script pourrait être plus d'un programme de nœud, ou un programme de nœud qui est exécuté en arrière-plan, ou le programme pourrait avoir des processus enfants qui utilisent ce port.

43voto

WolfReporter Points 527

Sous Linux (dérivés d'Ubuntu au moins)

killall node

est plus facile que ce formulaire.

ps | grep <something>
kill <somepid>

Ni l'un ni l'autre ne fonctionnera si vous avez un enfant orphelin qui tient le port. A la place, faites ceci :

netstat -punta | grep <port>

Si le port est retenu, vous verrez quelque chose comme ceci :

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

Maintenant, tuer par pid :

kill -9 <pid>

1 votes

Ceci devrait être noté comme la réponse complète. Car dans mon cas aussi, c'était un enfant orphelin. C'est ce qu'on appelle un processus zombie ?

1 votes

Au lieu de l'attendu <pid>/<parent> Je reçois -

35voto

wcurtis Points 359

La commande suivante vous donnera une liste des processus de nœuds en cours d'exécution.

ps | grep node

Pour libérer ce port, arrêtez le processus en utilisant ce qui suit.

kill <processId>

3 votes

Vous pouvez ajouter un | grep -v grep pour exclure le grep processus.

6 votes

Comme l'a écrit le posteur d'origine : "sous Windows 7" ... ;-)

4 votes

Une bien meilleure alternative serait pidof node

32voto

Benny Neugebauer Points 5393

Vous obtenez l'erreur EADDRINUSE parce que le port, que votre application veut utiliser, est occupé par un autre processus. Pour libérer ce port, vous devez mettre fin au processus qui l'occupe.

Puisque vous êtes sur Windows vous pouvez mettre fin au processus en utilisant l'invite de commande ( cmd ). Avec le cmd vous pouvez découvrir l'ID de processus (PID) de l'application bloquante. Vous aurez besoin du PID afin de terminer / tuer le processus.

Voici un guide étape par étape...

  1. Trouver tous les processus qui fonctionnent sur un port spécifié (dans cet exemple, le port est "3000") :

    netstat -ano | find ":3000 "

  2. El netstat listera tous les processus en cours d'exécution sur le port spécifié. Dans la dernière colonne de l'écran netstat vous pouvez voir les résultats PID (dans cet exemple, le PID est "8308"). Vous pouvez en savoir plus sur un PID en exécutant la commande suivante :

    tasklist /fi "pid eq 8308"

  3. Si vous voulez mettre fin à un processus, vous pouvez le faire avec la commande suivante en utilisant sa fonction PID (dans cet exemple, le PID est "8308") :

    taskkill /pid 8308 /f

Capture d'écran

enter image description here

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