J'ai un simple serveur TCP qui écoute sur un port.
var net = require("net");
var server = net.createServer(function(socket) {
socket.end("Hello!\n");
});
server.listen(7777);
Je le démarre avec node server.js
puis le ferme avec Ctrl + Z sur Mac. Lorsque j'essaye de l'exécuter à nouveau avec node server.js
j'obtiens ce message d'erreur:
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: listen EADDRINUSE
at errnoException (net.js:670:11)
at Array.0 (net.js:771:26)
at EventEmitter._tickCallback (node.js:192:41)
Suis-je en train de fermer le programme dans le mauvais sens? Comment puis-je empêcher que cela se produise?
fg
après Ctrl-Z, vous serez de retour là où vous vous étiez arrêté. Votre ancien nœud est donc toujours en cours d'exécution. Attention si vous faites cela pour d'autres commandes aussi!Ctrl+Z
action, une méthodologie appropriée pourrait êtrefg
de relancer le processus, puisCtrl+C
de le tuer correctement.Réponses:
Pour terminer le programme, vous devez utiliser Ctrl+ C. Si vous faites cela, il envoie
SIGINT
, ce qui permet au programme de se terminer correctement, sans se lier de tous les ports sur lesquels il écoute.Voir aussi: https://superuser.com/a/262948/48624
la source
Ctrl + C
ne fonctionne pas pour moi. Ne^C
se tape que dans la console et le programme ne se ferme pas.Ctrl+C
fonctionne bien. En tout cas, c'est un problème distinct de votre vrai problème. Vous devriez poster une question "Ctrl + C ne fonctionne pas" sur SuperUser.com.kill -9
, mais je ne le ferais pas. Êtes-vous réellement sûr que votre application est toujours celle qui maintient les ports ouverts? Je n'ai jamais eu ce problème. Dès que ma candidature se termine, les connexions sont toujours immédiatement interrompues. J'utiliserais netstat pour déterminer si votre application ou quelque chose d'autre persiste sur ce port.Ctrl+ le Zsuspend, ce qui signifie qu'il peut toujours fonctionner.
Ctrl+ Cle tuera réellement.
vous pouvez également le tuer manuellement comme ceci:
Trouvez l'ID de processus (deuxième à partir de la gauche):
Cela peut également fonctionner
la source
killall node
dans votre réponse, car c'est vraiment l'option la plus simple et la plus fiable (tant que vous êtes d'accord pour tuer toutes les instances)Ou vous pouvez également faire tout cela en une seule ligne:
Vous pouvez remplacer le nœud à l'intérieur de '\ snode \ s' par tout autre nom de processus.
la source
Reprenez et tuez le processus:
Ctrl+ le Zsuspend, ce qui signifie qu'il fonctionne toujours en tant que processus d'arrière-plan suspendu.
Vous êtes probablement maintenant à une invite de terminal ...
Donnez la commande
fg
pour reprendre le processus au premier plan.tapez Ctrl+ Cpour le tuer correctement.
Alternativement, vous pouvez le tuer manuellement comme ceci:
( REMARQUE: les commandes suivantes peuvent nécessiter un root, tout
sudo ...
comme votre ami)ou, si vous n'avez pas pkill, cela peut fonctionner:
ou peut-être ceci:
parfois le processus listera son propre grep, auquel cas vous aurez besoin de:
.
h / t @ruffin des commentaires sur la question elle-même. J'ai eu le même problème et son commentaire m'a aidé à le résoudre moi-même.
la source
vous pouvez taper
.exit
pour quitter le noeud js REPLla source
Si vous exécutez Node.js de manière interactive (le REPL):
Ctrl+ Cvous ramènera à> invite puis tapez:
ou utilisez simplement Ctrl+ D.
la source
$ sudo killall node
dans un autre terminal fonctionne sur mac , tout enkillall node
ne fonctionnant pas:la source
sur Linux, essayez:
pkill node
sur les fenêtres:
ou
la source
Bien que ce soit une réponse tardive, je l'ai trouvée dans les documents NodeJS :
Donc, pour résumer, vous pouvez quitter en:
.exit
dans nodejs REPL.<ctrl>-C
deux fois.<ctrl>-D
.process.exit(0)
ce qui signifie une sortie naturelle de REPL. Si vous souhaitez renvoyer tout autre statut, vous pouvez renvoyer un nombre différent de zéro.process.kill(process.pid)
est le moyen de tuer en utilisant l'API nodejs depuis votre code ou depuis REPL.la source
J'ajoute cette réponse parce que pour de nombreux projets avec des déploiements de production, nous avons des scripts qui arrêtent ces processus afin que nous n'ayons pas à le faire.
Une façon propre de gérer vos processus Node Server consiste à utiliser le
forever
package (à partir deNPM
).Exemple:
Installer pour toujours
npm install forever -g
Exécuter le serveur de noeud
forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js
Résultat:
info: Forever processing file: server.js
Serveur de noeud d'arrêt
forever stop server.js
Résultat
info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj "/usr/bin/nodejs/node" ~/path/to/your/project/server.js 23084 13176 ~/.forever/forever.log 0:0:0:0.247
Cela arrêtera proprement votre application serveur.
la source
Si vous souhaitez arrêter votre serveur avec
npm stop
ou quelque chose comme ça. Vous pouvez écrire le code qui tue votre processus serveur comme:Consultez ce lien pour les détails: https://gist.github.com/dominhhai/aa7f3314ad27e2c50fd5
la source
J'ai rencontré un problème où plusieurs serveurs de nœuds sont en cours d'exécution et je veux simplement en tuer un et le redéployer à partir d'un script.
Remarque: Cet exemple est dans un shell bash sur Mac.
Pour ce faire, je m'assure de rendre mon
node
appel aussi précis que possible. Par exemple, plutôt que d'appeler ànode server.js
partir du répertoire des applications, j'appellenode app_name_1/app/server.js
Ensuite, je peux le tuer en utilisant:
kill -9 $(ps aux | grep 'node\ app_name_1/app/server.js' | awk '{print $2}')
Cela ne tuera que le processus de nœud exécutant app_name_1 / app / server.js.
Si tu as couru
node app_name_2/app/server.js
ce processus de noeud continuera de s'exécuter.Si vous décidez de les tuer tous, vous pouvez les utiliser
killall node
comme d'autres l'ont mentionné.la source
Réponse tardive mais sur Windows, ouvrir le gestionnaire de tâches avec CTRL + ALT + SUPPR puis tuer les processus Node.js résoudra cette erreur.
la source
vous pouvez travailler la commande suivante pour être spécifique dans localalserver kill (ici: 8000)
Il vous donnera les groupes de TCP suivants:
Il tuera processId correspondant à TCP *: 8000
la source
Pour MacOS
Exécutez le code ci-dessous et appuyez sur Entrée
la source
Vous pouvez utiliser l' unité de fusion pour obtenir ce que vous voulez faire.
Afin d'obtenir les identifiants de processus des tâches s'exécutant sur un port, vous pouvez faire:
Disons que le port est 8888, la commande devient:
Et pour tuer un processus qui s'exécute sur un port, ajoutez simplement -k switch.
Exemple (le port est 8888):
C'est tout! Il fermera l'écoute du processus sur le port. Je le fais généralement avant d'exécuter mon application serveur.
la source
Mon cas d'utilisation: sur MacOS , exécutez / réexécutez plusieurs serveurs de nœuds sur différents ports à partir d'un script
exécuter :
"cd $PATH1 && node server1.js & cd $PATH2 && node server2.js & ..."
stop1 :
"kill -9 $(lsof -nP -i4TCP:$PORT1 | grep LISTEN | awk '{print $2}')"
stop2, stop3 ...
réexécuter :
"stop1 & stop2 & ... & stopN ; run
pour plus d'informations sur la recherche d'un processus par un port: Qui écoute sur un port TCP donné sous Mac OS X?
la source
Pour Windows, recherchez d'abord le PID avec votre numéro de port
Après cela, tuez la tâche, assurez-vous que vous êtes à la racine de votre lecteur "c" Et la commande sera
taskkill /F /PID your pid
la source
si vous utilisez VS Code et le nœud de sélection de terminal dans le menu déroulant de droite, puis faites Ctrl + C. Ensuite, cela fonctionnera
Appuyez sur y lorsque vous y êtes invité.
Merci
la source