je teste un serveur écrit en nodejs sur Windows 7 .__ et lorsque j'essaie d'exécuter le testeur dans la ligne de commande, l'erreur suivante s'affiche
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 résoudre ce problème sans avoir à redémarrer?
Cela signifie que l'adresse à laquelle vous essayez de lier le serveur est en cours d'utilisation. Essayez un autre port ou fermez le programme en utilisant ce port.
Courir:
ps -ax | grep node
Vous obtiendrez quelque chose comme:
60778 ?? 0:00.62 /usr/local/bin/node abc.js
Alors fais:
kill -9 60778
La commande suivante vous donnera une liste des processus de noeud en cours d'exécution.
ps | grep node
Pour libérer ce port, arrêtez le processus en procédant comme suit.
kill <processId>
Sous Linux (au moins dérivés de Ubuntu)
killall node
est plus facile que cette forme.
ps | grep <something>
kill <somepid>
Cela ne fonctionnera pas non plus si un enfant orphelin tient le port. Au lieu de cela, faites ceci:
netstat -punta | grep <port>
Si le port est tenu, vous verrez quelque chose comme ceci:
tcp 0 0.0.0.0:<port> 0.0.0.* LISTEN <pid>/<parent>
Maintenant tuez par pid:
kill -9 <pid>
Vous obtenez l'erreur EADDRINUSE
car le port que votre application souhaite utiliser est occupé par un autre processus. Pour libérer ce port, vous devez mettre fin au processus d'occupation.
Puisque vous êtes sur Windows, vous pouvez terminer le processus à l’aide de la commande Invite (cmd
). Avec cmd
, vous pouvez découvrir l'ID de processus (PID) de l'application bloquante. Vous aurez besoin du PID pour terminer/tuer le processus.
Voici un guide étape par étape ...
Recherchez tous les processus en cours d'exécution sur un port spécifié (dans cet exemple, le port est "3000"):
netstat -ano | trouver ": 3000"
La commande netstat
répertorie tous les processus en cours d'exécution sur le port spécifié. Dans la dernière colonne des résultats netstat
, vous pouvez voir les PID
s (dans cet exemple, PID est "8308"). Vous pouvez en savoir plus sur une PID
spécifique en exécutant la commande suivante:
liste de tâches/fi "pid eq 8308"
Si vous souhaitez mettre fin à un processus, vous pouvez le faire avec la commande suivante en utilisant sa variable PID
(dans cet exemple, PID est "8308"):
taskkill/pid 8308/f
Capture d'écran
Lorsque vous obtenez une erreur Erreur: écoutez EADDRINUSE,
Essayez d’exécuter les commandes Shell suivantes:
netstat -a -o | grep 8080
taskkill /F /PID 6204
grep
ed for 8080, car je sais que mon serveur fonctionne sur le port 8080. (static
me dit quand je le lance: 'servant ". À http://127.0.0.1:8080 '.) pour rechercher un autre port.
supposons que votre serveur fonctionne sur port 3000
lsof -i tcp:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 11716 arun 11u IPv6 159175 0t0 TCP *:3000 (LISTEN)
après cela, utilisez kill -9 <pid>
dans le cas ci-dessus Sudo kill -9 11716
utilisez la commande ci-dessous pour tuer un processus exécuté sur un certain port - 3000 dans cet exemple ci-dessous
kill -9 $(lsof -t -i:3000)
Une solution possible qui a fonctionné pour moi consistait simplement à fermer la fenêtre du navigateur dans laquelle le script correspondant " http: // localhost: 3000/ " était exécuté.
Quand vous obtenez une erreur
Erreur: écoutez EADDRINUSE
Ouvrez la commande Invite et tapez les instructions suivantes:
netstat -a -o | grep 8080
taskkill /F /PID** <*ur Process ID no*>
après cela redémarrer l'interface de lacune téléphonique.
Si vous voulez savoir quel identificateur de processus utilise phonegap, ouvrez TASK MANAGER et consultez l'en-tête de colonne_ PIDet recherchez le PID no.
Le noeud killall -9
mentionné ci-dessus, suggéré par Patrick, fonctionne comme prévu et résout le problème, mais vous voudrez peut-être lire la partie édition de cette même réponse pour savoir pourquoi kill -9
n'est peut-être pas la meilleure façon de le faire.
En plus de cela, vous voudrez peut-être cibler un seul processus plutôt que de tuer aveuglément tous les processus actifs.
Dans ce cas, obtenez d'abord l'ID de processus (PID) du processus en cours d'exécution sur ce port (par exemple 8888):
lsof -i tcp:8888
Cela retournera quelque chose comme:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 57385 You 11u IPv6 0xac745b2749fd2be3 0t0 TCP *:ddi-tcp-1
(ECOUTER) Ensuite, il suffit de faire (ps - en fait pas. S'il vous plaît continuez à lire ci-dessous):
kill -9 57385
vous pouvez modifier votre port dans app.js ou dans le fichier de configuration du projet.
default ('port', 80)
et pour voir si le port 80 est déjà utilisé, vous pouvez le faire
netstat -antp | grep 80
netstat -antp | noeud grep
vous voudrez peut-être voir si le processus de noeud est déjà en cours ou non.
ps -ef | noeud grep
et si vous la trouvez déjà en marche, vous pouvez la tuer en utilisant
killall node
J'ai créé 2 serveurs, écoutant sur le même port 8081, fonctionnant à partir du même code, tout en apprenant
La création du premier serveur a fonctionné La création du deuxième serveur a échoué avec EADDRINUSE
les retards de rappel des noeuds.js peuvent expliquer l’absence de travail, ou la création du second serveur avait une exception et le programme était quitté, de sorte que le 1er serveur est également fermé
2 indice de problème de serveur, je ai eu de: Comment résoudre l'erreur: écouter EADDRINUSE tout en utilisant nodejs?
Cela fonctionne sur Mac:
Étape 1.
Sudo lsof -i tcp:3000 (or whatever port you want to kill)
La commande ci-dessus vous indiquera le ou les ID de processus détenant actuellement le port.
Étape 2.
Kill -9 <pid>
Erreur: écoutez EADDRINUSE pour le résoudre dans Ubuntu, exécutez-le dans le terminal netstat -nptl
et après ce kill -9 {process-number}
, cette commande consiste à tuer le processus de noeud. Vous pouvez maintenant essayer de réexécuter la commande node server.js
Ex
écouter EADDRINUSE ::: 8080
netstat -nptl
tcp6 0 0 ::: 9000 ::: * LISTEN 9660/Java
tcp6 0 0 ::: 5800 ::: * ECOUTER -
tcp6 0 0 ::: 5900 ::: * ECOUTER -
tcp6 0 0 ::: 8080 ::: * LISTEN 10401/node
tcp6 0 0 ::: 20080 ::: * LISTEN 9660/Java
tcp6 0 0 ::: 80 ::: * ECOUTER -
tcp6 0 0 ::: 22 ::: * ECOUTER -
tcp6 0 0 ::: 10137 ::: * ECOUTER 9660/Java
tuer -9 10401
il suffit de tuer le noeud.
J'ai utilisé la commande netstat -ano | grep "portnumber"
afin de répertorier le numéro de port/PID de ce processus. Ensuite, vous pouvez utiliser taskkill -f //pid 111111
pour tuer le processus, la dernière valeur étant le pid que vous avez trouvé dans la première commande.
Un des problèmes que je rencontre parfois est le réapparition de nœud même après la suppression du processus. Je dois donc utiliser le bon vieux gestionnaire de tâches pour supprimer manuellement le processus de nœud.
ps -ef | grep node trouver app.js, kill pid de app.js
Pour tuer le serveur de noeud, commencez par exécuter cette commande dans votre terminal:
top
id
de la fenêtre précédente: PID number -9 kill
so, vous avez tué votre serveur de nœud. Essayez à nouveau d’exécuter votre application.Dans mon cas, le redémarrage de la machine a résolu le problème.
Si vous avez essayé toutes les solutions ci-dessus, mais vous ne trouvez toujours pas le processus rouge, essayez-les à nouveau, mais veillez à inclure "Sudo" devant les commandes.
J'ai le noeud rouge installé sur mon Mac et mon Raspberry Pi. Avait exactement le même problème et faire 'killall' n'a pas aidé. Une fois que j'ai arrêté le Raspberry Pi et redémarré mon ordinateur, tout a bien fonctionné.
Il est possible que vous ayez essayé d’exécuter la commande npm start dans deux onglets différents.
Vous devrez tuer le port en essayant d'utiliser la commande suivante sur le terminal
$ Sudo killall -9 nodejs
Si vous aimez davantage l'interface utilisateur, trouvez le processus Node.js dans le gestionnaire de tâches Windows et éliminez-le.