J'ai un serveur simple fonctionnant dans node.js utilisant connect:
var server = require('connect').createServer();
//actions...
server.listen(3000);
Dans mon code, j'ai des gestionnaires réels, mais c'est l'idée de base. Le problème que je reçois est
EADDRINUSE, Address already in use
Je reçois cette erreur lorsque j'exécute à nouveau mon application après une panne ou des erreurs. Comme je n'ouvre pas une nouvelle instance de terminal, je termine le processus avecctr + z
.
Je suis pratiquement certain que tout ce que j'ai à faire est de fermer le serveur ou la connexion. J'ai essayé d' appeler server.close()
à process.on('exit', ...);
pas de chance.
Ctrl + z
vous devez utiliserCtrl + c
ce qui fermera le programme correctement en envoyant SIGQUIT :) Voir le wiki pour plus de détails :)pkill nodejs
oupkill node
si sur un système d'exploitation de type UNIXRéponses:
process.on('exit', ..)
n'est pas appelé si le processus se bloque ou est tué. Il n'est appelé que lorsque la boucle d'événement se termine, et comme enserver.close()
quelque sorte, la boucle d'événement se termine (il doit encore attendre les piles en cours d'exécution ici et là), cela n'a aucun sens de le mettre à l'intérieur de l'événement de sortie ...En cas d'accident, faites
process.on('uncaughtException', ..)
et tuezprocess.on('SIGTERM', ..)
Cela étant dit, SIGTERM (signal de suppression par défaut) permet à l'application de nettoyer, tandis que SIGKILL (arrêt immédiat) ne laisse rien faire à l'application.
la source
Vous pouvez également suivre l'itinéraire en ligne de commande:
pour obtenir les identifiants de processus.
Alors:
Faire le -9 sur kill envoie un SIGKILL (au lieu d'un SIGTERM). SIGTERM a été ignoré par nœud pour moi parfois.
la source
ps aux | grep node
ne montre rien;textareaserver --editor-cmd='gvim -f'
échoue toujours : 14 mars 21:19:30 - socket.io prêt - acceptation des connexions Pourrait maintenant démarrer le serveur: EADDRINUSE, Adresse déjà utiliséekillall -9 node
pidof
est aussi pratiquelsof -n -i4TCP:8000 | grep LISTEN | tr -s ' ' | cut -f 2 -d ' ' | xargs kill -9
kill
avec l'ID de processus spécifique au lieu dekillall
.Tout d'abord, vous voudriez savoir quel processus utilise
port 3000
cela répertoriera tous les PID écoutant sur ce port, une fois que vous avez le PID, vous pouvez le terminer avec les éléments suivants:
la source
ps aux | grep node
pour moi. Je n'avais pas non plus besoinsudo
sudo
.killall -9 {COMMAND}
par exemplekillall -9 node
Je l'ai frappé sur mon ordinateur portable exécutant win8. cela a fonctionné.
Exécutez cmd.exe en tant qu'administrateur:
la source
taskkill /F /IM node.exe
fonctionne comme un charme pour moi sur Windows à partir de n'importe quel répertoire :-) Merci pour le partage !!Vérifiez le PID, c'est-à-dire l'ID du processus exécuté sur le port 3000 avec la commande ci-dessous:
Cela produirait quelque chose comme ceci:
Maintenant, tuez le processus en utilisant:
la source
J'ai trouvé cette solution, essayez-la Donnez l'autorisation d'utiliser
sudo
la source
ps aux | grep node
Linux
Exécutez
ps
et déterminez le PID de votre processus de nœud.Ensuite, exécutez
sudo kill PID
les fenêtres
Utilisez la liste des tâches pour afficher la liste des processus en cours d'exécution:
Ensuite, tuez le processus de nœud comme ceci (en utilisant le PID obtenu à partir de la
tasklist
commande):la source
taskkill //IM node.exe
et je viens de tuer le nœud. travaillé.Voici un one liner (remplacez 3000 par un port ou une variable de configuration):
la source
J'obtenais cette erreur une fois et j'ai adopté de nombreuses approches ici.
Mon problème était que j'avais deux
app.listen(3000);
appels dans le même script app.js. Le premier app.listen () a réussi là où le second a jeté l'erreur.Une autre commande utile que j'ai rencontrée qui m'a aidé à déboguer était de
sudo fuser -k 3000/tcp
tuer tous les processus voyous que vous pourriez avoir démarrés (certains processus peuvent redémarrer, par exemple s'ils sont exécutés avec forever.js, mais cela m'a été utile).la source
npm start
Pour Windows, ouvrez le Gestionnaire des tâches et recherchez les processus node.exe. Tuez-les tous avec Fin de tâche.
la source
La description:
la source
Pour info, vous pouvez tuer le processus en une seule commande
sudo fuser -k 3000/tcp
. Cela peut être fait pour tous les autres ports comme 8000, 8080 ou 9000 qui sont couramment utilisés pour le développement.la source
Utilisateurs PowerShell:
la source
Découvrez d'abord ce qui fonctionne en utilisant:
Vous obtiendrez quelque chose comme:
Ensuite, vous pouvez tuer le processus comme suit:
Ensuite, vous pourrez exécuter sans obtenir les erreurs listen EADDRINUSE ::: 3000
la source
Pour Visual Studio Noobs comme moi
Vous exécutez peut-être le processus dans d'autres terminaux!
Après avoir fermé le terminal dans Visual Studio , le terminal disparaît simplement .
J'en ai créé manuellement un nouveau en pensant que le précédent avait été détruit. En réalité, chaque fois que je cliquais sur Nouveau terminal, j'en créais un nouveau en plus des précédents .
J'ai donc localisé le premier terminal et ... Voila, j'y dirigeais le serveur.
la source
Gestionnaire des tâches (ctrl + alt + del) ->
Onglet Processus ->
sélectionnez le processus "node.exe" et cliquez sur "Terminer le processus"
la source
Vous pouvez rencontrer des scénarios où même tuer le fil ou le processus ne mettra pas fin à l'application (cela se produit pour moi sous Linux et Windows de temps en temps). Parfois, vous pouvez déjà avoir une instance en cours d'exécution que vous n'avez pas fermée.
En raison de ce genre de circonstances, je préfère ajouter à mon
package.json
:Je peux ensuite les appeler en utilisant:
Vous pouvez devenir plus sophistiqué et créer ces commandes BIN avec un indicateur d'argument si vous le souhaitez. Vous pouvez également les ajouter en tant que commandes à exécuter dans une clause try-catch.
la source
Dans les utilisateurs de Windows: ouvrez
task manager
etend task
lenodejs.exe
fichier, cela fonctionne bien.la source
Vous pouvez utiliser hot-node pour empêcher votre serveur de planter / erreurs d'exécution. Hot-node redémarre automatiquement l'application nodejs pour vous chaque fois qu'il y a un changement dans le programme de noeud [source] / processus [programme de noeud en cours d'exécution].
Installez hot-node en utilisant npm en utilisant l'option globale:
la source
Avec tout le respect que je dois à toutes les réponses du formulaire, je voudrais ajouter un point.
J'ai constaté que lorsque je ferme une application de nœud par erreur à l'aide de Ctrl + Z, la toute prochaine fois que j'essaie de l'ouvrir a la même erreur EADDRINUSE.
Lorsque j'utilise Ctrl + C pour terminer une application de nœud, la prochaine fois que je l'ouvrais, cela se faisait sans accroc.
Le fait de changer le numéro de port pour autre chose que celui par erreur a résolu le problème.
la source
fg
cette même console. Vous pouvez ensuite voir ce qui se passe sur ce serveur après avoir tapé diverses commandes dans la ligne de commande.Sous Linux.
Ajouter une fonction à
~/.bashrc
:Tirez les modifications:
source ~/.bashrc
Et utilisez-le:
killTcpListen 3000
la source
Réécriture du commentaire de @Gerard dans ma réponse:
Essayez
pkill nodejs
oupkill node
si sur un système d' exploitation de type UNIX.Cela tuera le processus exécutant le serveur de noeud exécuté sur n'importe quel port. A travaillé pour moi.
Namaste🙏
la source
Juste au cas où vérifiez si vous avez ajouté cette ligne plusieurs fois par erreur
Le code ci-dessus est pour express mais vérifiez simplement si vous essayez d'utiliser le même port deux fois dans votre code.
la source
Win10, git bash v2.15, noeud v8.9.1, npm v5.5.1
J'avais un script package.json pour démarrer le nœud:
"start": "node index.js"
Chaque fois que j'utilisais cela, que je le tue avec ctrl + c, je rencontrais ce problème.
Si je viens de courir
node index.js
depuis git bash au lieu denpm run start
et de tuer avec ctrl + c, je n'ai jamais eu cette erreur.Je ne sais pas pourquoi, mais j'ai pensé que cela pourrait aider quelqu'un.
la source
Solution d'interface utilisateur Pour les utilisateurs de Windows: j'ai trouvé que les meilleures réponses ne fonctionnaient pas pour moi, elles semblaient être des commandes pour les utilisateurs Mac ou Linux. J'ai trouvé une solution simple qui ne nécessitait aucune commande à retenir: ouvrez le Gestionnaire des tâches (ctrl + shift + esc). Regardez les processus d'arrière-plan en cours d'exécution. Trouvez n'importe quoi Node.js et terminez la tâche.
Après avoir fait cela, le problème a disparu pour moi. Comme indiqué dans d'autres réponses, ce sont des processus d'arrière-plan qui sont toujours en cours d'exécution car une erreur a été rencontrée précédemment et les fonctions de sortie / nettoyage normales n'ont pas été appelées, donc une façon de les tuer est de trouver le processus dans le Gestionnaire des tâches et de le tuer là-bas . Si vous avez exécuté le processus à partir d'un terminal / powerShell, vous pouvez généralement utiliser ctrl + c pour le tuer.
la source
Le nœud fonctionne quelque part en mémoire et ce port est verrouillé. Sous Windows, ce problème se produira, comme la plupart des problèmes Windows, être résolu en appuyant sur CTRL+ ALT+ DELet / ou en redémarrant.
la source
Les raisons de ce problème sont les suivantes:
la source
server.close () prend un certain temps pour fermer la connexion, nous devons donc en faire un appel asynchrone en tant que tel:
IMPORTANT: lors de l'utilisation de l' attente , nous devons utiliser le mot-clé async dans notre fonction d'encapsulation en tant que tel:
la source
Utilisez la commande ci-dessous dans le terminal / cmd pour changer le port (npm run dev est pour node.js), vous pouvez avoir d'autres commandes pour exécuter votre application, la plupart d'entre elles fonctionneront tout en changeant le port, plus facilement et plus rapidement. De plus, vous pouvez utiliser n'importe quel numéro de port libre dans votre système au lieu de 3002
La plupart du temps, lorsque l'on exécute le projet tout en en quittant un brusquement ou sans le savoir, appuie sur Ctrl + Z qui vous permet de quitter le port. Choisissez toujours Ctrl + C qui ne sortira pas du port pour exécuter le serveur ou le projet.
De plus, il est temps de changer le numéro de port dans votre code
la source
Cela signifie que vous avez deux serveurs de nœuds exécutés sur le même port, si l'un s'exécute sur le port, disons 3000, changez l'autre en un autre port, disons 3001 et tout fonctionnera bien
la source