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

120

Je teste un serveur écrit en nodejs sur Windows 7 et lorsque j'essaye d'exécuter le testeur dans la 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?

Adam
la source
9
sudo killall nodepeut être pratique
Hashir Hussain

Réponses:

101

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.

fent
la source
Je n'ai rien trouvé en utilisant le port 3000, mais le changer a fonctionné!
Dennis
7
Étant donné que ce programme à nœud unique est la seule chose à utiliser 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 je l'ai utilisé node app.jset arrêté avec Ctrl + C, mais j'ai commencé à avoir le problème EADDRINUSE après la première utilisation npm start, il semble donc que la vraie solution serait d'utiliser autre chose que Ctrl + C pour arrêter après utilisation npm start.
David Mason
Votre npm startscript peut être plus d'un programme de nœud, ou un programme de nœud exécuté en arrière-plan, ou le programme peut avoir des processus enfants qui utilisent ce port.
fent
1
Très souvent, cette erreur se produit parce qu'un processus de nœud n'a pas été interrompu. Mais parfois, le port est utilisé par d'autres processus, et il peut donc être difficile de comprendre / localiser le processus correct qui le bloque. WolfReporter ci-dessous a une solution correcte à ce problème! stackoverflow.com/a/22875192/36975
qualbeen
6
Je l'ai fait ps aux | grep node, j'ai trouvé l'identifiant du processus (deuxième colonne) et je l'ai simplement tué avec kill <pid>(le mien était kill 18762).
nik_m
168

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
Komposr
la source
Merci! Fonctionne sur ma machine!
olefrank
Merci. C'était ce dont j'avais besoin. J'ai installé pm2 qui démarre automatiquement l'application de nœud lorsqu'elle est fermée. J'ai dû désactiver pm2 pour démarrer automatiquement le nœud.
KlevisGjN
Travaux! Merci beaucoup
Wim den Herder
9
Comment faites-vous cela sous Windows?
William
kill -15 60778serait beaucoup mieux car cela permettrait au processus de se SIGTERMSIGKILL
terminer
39

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

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 détient le port. Faites plutôt ceci:

netstat -punta | grep <port>

Si le port est maintenu, 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>
WolfReporter
la source
1
Cela devrait être marqué comme la réponse complète. Car dans mon cas aussi, c'était un enfant orphelin. Est-ce ce qu'ils appellent un processus zombie?
Nithish Inpursuit Ofhappiness
1
Au lieu de ce que <pid>/<parent>j'attends-
Francisco Corrales Morales
35

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

ps | grep node

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

kill <processId>
wcurtis
la source
3
Vous souhaiterez peut-être ajouter un | grep -v greppour exclure le grepprocessus.
Garrett Hyde
6
Comme l'a écrit l'affiche originale: "sur Windows 7" ... ;-)
Golo Roden
4
Une bien meilleure alternative seraitpidof node
Itay Grudev
pidofa été facilement installé pour moi sur osx avec homebrewbrew install pidof
electblake
1
Si vous exécutez plus que des applications de nœud, il est possible que l'adresse soit liée à une autre application. Ne serait-il pas préférable de rechercher le pid lié au port sur lequel vous essayez de démarrer? ie: pour Linux, vous pouvez utiliser netstat -lnptu | grep port #. Je ne sais pas quel est l'équivalent pour Windows.
chrisst
31

Vous obtenez l'erreur EADDRINUSEcar 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 sous Windows , vous pouvez terminer le processus à l'aide de l'invite de commande ( cmd). Avec le, cmdvous pouvez découvrir l'ID de processus (PID) de l'application de blocage. Vous aurez besoin du PID pour terminer / tuer le processus.

Voici un guide étape par étape ...

  1. Recherchez tous les processus qui s'exécutent sur un port spécifié (dans cet exemple, le port est "3000"):

    netstat -ano | trouver ": 3000"

  2. La netstatcommande listera tous les processus en cours d'exécution sur le port spécifié. Dans la dernière colonne des netstatrésultats, vous pouvez voir le PIDs (dans cet exemple, le PID est "8308"). Vous pouvez en savoir plus sur un spécifique PIDen exécutant la commande suivante:

    liste des tâches / fi "pid eq 8308"

  3. Si vous souhaitez terminer un processus, vous pouvez le faire avec la commande suivante en utilisant son PID(dans cet exemple, le PID est "8308"):

    taskkill / pid 8308 / f

Capture d'écran

entrez la description de l'image ici

Benny Neugebauer
la source
1
explication solide.
Joe Healy
19

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

J'ai grepédité pour 8080, car je sais que mon serveur fonctionne sur le port 8080. ( staticme dit quand je le lance: 'servant "." À http://127.0.0.1:8080 '.) Vous devrez peut-être rechercher un autre Port.

swathy valluri
la source
1
Enfin! Une réponse qui recherche par port, plutôt que par processus. Ce n'est pas seulement un nœud qui peut attacher un port!
Michael Scheper le
J'ai produit un module pour détecter quel processus en cours verrouille un port, appelé porthog . Il exécute essentiellement le code ci-dessus.
Corey
15

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 cette utilisation kill -9 <pid>

dans le cas ci-dessus sudo kill -9 11716

Arun Kasyakar
la source
12

utilisez la commande ci-dessous pour tuer un processus en cours d'exécution sur un certain port - 3000 dans cet exemple ci-dessous

kill -9 $(lsof -t -i:3000)
Atta Ur Rahman
la source
7

Une solution possible qui a fonctionné pour moi était simplement de fermer la fenêtre dans le navigateur où j'avais le script correspondant " http: // localhost: 3000 / " en cours d'exécution.

iloo
la source
Oui, la fenêtre du navigateur toujours ouverte est une erreur courante avec les ports de l'hôte local :-)
Dave Everitt
7

Vérifiez l'ID de processus

sudo lsof -i: 8081

Que de tuer le processus particulier

sudo tuer -9 2925

entrez la description de l'image ici

Surender Kumar
la source
6

Lorsque vous obtenez une erreur

Erreur: écoutez EADDRINUSE

Ouvrez l'invite de commande et tapez les instructions suivantes:

netstat -a -o | grep 8080
taskkill /F /PID** <*ur Process ID no*>

après cela, redémarrez l'interface d'écart de téléphone.

Si vous voulez savoir quel processus ID phonegap utilise, ouvrez TASK MANAGER et regardez l'en-tête de colonne PID et trouvez le PID no.

Eshan Chattaraj
la source
Je ne pouvais pas faire fonctionner taskkill, alors j'ai ouvert le gestionnaire de tâches et ajouté le PID et l'ai tué là-bas thx
Tom Stickel
5

Le killall -9nœud susmentionné , 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 réponse même pour savoir pourquoi ce kill -9n'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 (disons 8888):

lsof -i tcp:8888

Cela renverra quelque chose comme:

COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     57385   You   11u  IPv6 0xac745b2749fd2be3      0t0  TCP *:ddi-tcp-1

(ÉCOUTER) Alors faites simplement (ps - en fait pas. Veuillez continuer à lire ci-dessous):

kill -9 57385
Hemant Raghuwanshi
la source
4

Cela fonctionne sur Mac:

Étape 1.

sudo lsof -i tcp:3000 (or whatever port you want to kill)

La commande ci-dessus vous donnera le ou les identifiants de processus contenant actuellement le port.

Étape 2.

Kill -9 <pid>
saran3h
la source
3

vous pouvez changer votre port dans app.js ou dans le fichier de configuration de votre projet.

par défaut ('port', 80)

et pour voir si le port 80 est déjà utilisé, vous pouvez faire

netstat -antp | grep 80

netstat -antp | noeud grep

vous voudrez peut-être voir si le processus de nœud est déjà en cours d'exécution ou non.

ps -ef | noeud grep

et si vous trouvez qu'il fonctionne déjà, vous pouvez le tuer en utilisant

nœud killall

Adeel Ahmad
la source
1

J'ai créé 2 serveurs, écoutant sur le même port 8081, fonctionnant à partir du même code, tout en apprenant

La première création de serveur a fonctionné La deuxième création de serveur a échoué avec EADDRINUSE

Les retards de rappel de node.js peuvent être une raison pour laquelle aucun n'a fonctionné, ou la création du 2ème serveur a eu une exception, et le programme s'est arrêté, donc le 1er serveur est également fermé

2 indice de problème de serveur, j'ai obtenu de: Comment réparer l'erreur: écouter EADDRINUSE lors de l'utilisation de nodejs?

Manohar Reddy Poreddy
la source
1

Erreur: écoutez EADDRINUSE pour le résoudre dans Ubuntu, exécutez dans le terminal netstat -nptl et après cela, kill -9 {process-number}cette commande consiste à tuer le processus de nœud et vous pouvez maintenant essayer d'exécuter à nouveau la commande node server.js

Ex

écoute EADDRINUSE ::: 8080

netstat -nptl

tcp6 0 0 ::: 9000 ::: * ÉCOUTER 9660 / java
tcp6 0 0 ::: 5800 ::: * ÉCOUTER -
tcp6 0 0 ::: 5900 ::: * ÉCOUTER -
tcp6 0 0 ::: 8080 :: : * LISTEN 10401 / node
tcp6 0 0 ::: 20080 ::: * LISTEN 9660 / java
tcp6 0 0 ::: 80 ::: *
LISTEN - tcp6 0 0 ::: 22 ::: *
LISTEN - tcp6 0 0 ::: 10137 ::: * ÉCOUTER 9660 / java

tuer -9 10401

navnit kapadiya
la source
2
L'utilisateur a dit que c'était sur Windows. Sous Windows netstatreçoit différents paramètres. netstat -a -p tcp -b -vaffichera le nom du processus.
arboreal84
0

J'ai le nœud rouge installé sur mon Mac et mon Raspberry Pi. J'ai eu 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, cela a bien fonctionné.

alkopop79
la source
0

Il est possible que vous ayez essayé d'exécuter la commande npm start dans deux onglets différents. Vous ne pouvez pas exécuter npm start alors qu'il est déjà en cours d'exécution dans un onglet, vérifiez-le une fois.

Bhudke Aakshayy
la source
Veuillez fournir plus de détails.
DeshDeep Singh
0

Pour tous ceux qui ont essayé tout ce qui précède, mais qui ne trouvent toujours pas le processus rouge, essayez-les tous à nouveau mais assurez-vous d'inclure "sudo" devant les commandes.

MMMTroy
la source
0

Si vous aimez davantage l'interface utilisateur, recherchez le processus Node.js dans le gestionnaire de tâches Windows et tuez-le.

polina-c
la source
0

ps -ef | noeud grep trouver app.js, tuer le pid de app.js

megan5
la source
0

il suffit de tuer le nœud en tant que nœud pkill -9 dans le terminal d'ubantu que de démarrer le nœud

Aditya Prakash
la source
0

Vous devrez tuer le port en essayant d'utiliser la commande suivante sur le terminal

$ sudo killall -9 nodejs
Shivam Kohli
la source
0

[RÉSOLU]

Il est peut-être trop tard mais cela fonctionne comme un charme.

Vous devez pm2être installé

npm install -g pm2

Pour arrêter le serveur en cours d'exécution (server.js):

pm2 stop -f server.js
dariush f
la source
0

J'ai résolu ce problème en ajoutant ci-dessous dans mon package.json pour tuer le PORT actif - 4000 (dans mon cas) fonctionnant sur WSL2 / Linux / Mac

"scripts": {
    "dev": "nodemon app.js",
    "predev":"fuser -k 4000/tcp && echo 'Terminated' || echo 'Nothing was running on the PORT'",
  }

La source

zashishz
la source
-1

Pour tuer le serveur de nœuds, exécutez d'abord cette commande dans votre terminal:

  1. top
  2. ouvrez une autre fenêtre puis copiez le serveur idde la fenêtre précédente: PID number -9 kill vous avez donc tué votre serveur de nœuds, essayez à nouveau d'exécuter votre application.
Mohammed Dwina
la source
-1

J'ai utilisé la commande netstat -ano | grep "portnumber"afin de lister le numéro de port / PID pour ce processus. Ensuite, vous pouvez utiliser taskkill -f //pid 111111pour tuer le processus, la dernière valeur étant le pid que vous trouvez à partir de la première commande.

Un problème que je rencontre parfois est la réapparition du nœud même après avoir tué le processus, je dois donc utiliser le bon vieux gestionnaire de tâches pour tuer manuellement le processus du nœud.

davida227
la source
-4

Dans la fenêtre, veuillez exécuter cette commande:

taskkill /F /PID 1952
Thinhnk
la source
1
1952 est une variable. Le processus à tuer peut avoir un ID différent.
Design by Adrian le