Arrêter de nœud.programme js de la ligne de commande

j'ai un serveur TCP simple qui écoute sur un port.

var net = require("net");

var server = net.createServer(function(socket) {
    socket.end("Hello!n");
});

server.listen(7777);

je commence par node server.js et je la ferme ensuite avec Ctrl + Z sur Mac. Quand j'essaie de l'exécuter à nouveau avec node server.js je reçois 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)

est-ce que je ferme le programme de la mauvaise façon? Comment puis-je éviter cela?

248
demandé sur Eleeist 2012-05-09 23:05:40

13 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 avec élégance, en se déliant de tous les ports qu'il écoute.

voir aussi: https://superuser.com/a/262948/48624

324
répondu Brad 2017-03-20 10:18:16

Ctrl + Z suspend, ce qui signifie qu'il peut encore être en cours d'exécution.

Ctrl + C le tuera.

vous pouvez aussi le tuer manuellement comme ceci:

ps aux | grep node

trouver le numéro d'identification du procédé (deuxième à partir de la gauche):

kill -9 PROCESS_ID

Cela peut aussi travailler

killall node
271
répondu Jamund Ferguson 2014-05-27 14:43:23

ou alternativement vous pouvez faire tout cela dans une ligne:

kill -9 $(ps aux | grep '\snode\s' | awk '{print }')

vous pouvez remplacer le noeud à l'intérieur de '\snode\s' par n'importe quel autre nom de processus.

30
répondu Hamid 2014-09-22 15:44:32

vous pouvez taper .exit pour quitter le noeud js REPL

21
répondu sunny1304 2013-07-22 10:12:09

si vous exécutez un noeud.js de manière interactive (REPL):

Ctrl + C sera de retour que vous > prompt tapez:

process.exit()

ou tout simplement utiliser Ctrl + D .

16
répondu sr77in 2014-12-07 15:38:43

$ sudo killall node dans un autre terminal fonctionne sur mac , tandis que killall node ne fonctionne pas:

$ killall node
No matching processes belonging to you were found
13
répondu Maxim Yefremov 2013-06-18 12:53:26

reprendre et tuer le processus:

Ctrl + Z suspend, ce qui signifie qu'il est toujours en cours d'exécution comme d'une suspension de processus d'arrière-plan.

vous êtes probablement maintenant à une invite de terminal...

  1. Donner la commande fg pour reprendre le processus au premier plan.

  2. type Ctrl + C pour bien le tuer.


alternativement, vous pouvez le tuer manuellement comme ceci:

( NOTE: les commandes suivantes peuvent requérir root, donc sudo ... est votre ami)

pkill -9 node

ou, si vous n'avez pas pkill, cela peut fonctionner:

killall node

ou peut-être ceci:

kill $(ps -e | grep node | awk '{print }')

parfois, le processus va énumérer son propre grep, dans ce cas, vous aurez besoin de:

kill $(ps -e | grep dmn | awk '{print }')

.


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.

11
répondu Metagrapher 2017-05-26 21:48:40

bien que ce soit une réponse tardive, j'ai trouvé cela de NodeJS docs :

l'événement" exit "est émis lorsque le signal REPL est quitté, soit en recevant la commande .exit en entrée, l'utilisateur appuyant deux fois sur <ctrl>-C pour signaler SIGINT, soit en appuyant sur <ctrl>-D pour signaler " end " sur le flux d'entrée. Le rappel de l'écouteur est invoqué sans aucun argument.

donc pour vous résumer sortie possible par:

  1. Taper .exit en nodejs REPL.
  2. pression <ctrl>-C deux fois.
  3. en appuyant sur <ctrl>-D .
  4. process.exit(0) signifie une sortie naturelle de REPL. Si vous souhaitez retourner un tout autre statut, vous pouvez retourner un nombre différent de zéro.
  5. process.kill(process.pid) est le moyen de tuer à l'aide de l'api nodejs depuis votre code ou depuis REPL.
4
répondu randominstanceOfLivingThing 2016-11-06 22:22:10

sur linux, essayez: pkill node

sous windows:

Taskkill /IM node.exe /F

ou

from subprocess import call

call(['taskkill', '/IM', 'node.exe', '/F'])
4
répondu Jason 2018-07-18 18:26:21

Si vous voulez arrêter votre serveur avec npm stop ou quelque chose comme ça. Vous pouvez écrire le code qui tue le processus de votre serveur comme:

require('child_process').exec(`kill -9 ${pid}`)

vérifier ce lien pour le détail: https://gist.github.com/dominhhai/aa7f3314ad27e2c50fd5

2
répondu BigEgg 2016-01-31 03:06:12

je suis tombé sur un problème où j'ai serveurs à noeuds multiples en cours d'exécution, et je veux juste tuer l'un d'eux et le redéployer à partir d'un script.

Note: Cet exemple est dans un shell bash sur Mac.

pour ce faire, je m'assure que mon appel node soit aussi précis que possible. Par exemple, plutôt que d'appeler node server.js depuis le répertoire apps, j'appelle node app_name_1/app/server.js

Alors je peux le tuer en utilisant:

kill -9 $(ps aux | grep 'node\ app_name_1/app/server.js' | awk '{print }')

cela ne tuera que le processus de noeud exécutant app_name_1/app/server.js.

si vous avez lancé node app_name_2/app/server.js ce processus de noeud continuera à fonctionner.

si vous décidez de les tuer, vous pouvez utiliser killall node comme d'autres l'ont mentionné.

2
répondu bapin93 2017-07-06 02:51:20

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 pour que nous n'ayons pas à le faire.

une façon propre de gérer les processus de votre serveur de noeuds est d'utiliser le paquet forever (de NPM ).

exemple:

Installer Pour Toujours

npm install forever -g

Exécuter Nœud Serveur

forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js

résultat:

info: Forever processing file: server.js

Arrêt Du Serveur De Nœud

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 va arrêter proprement votre application de serveur.

2
répondu Decoded 2017-07-08 18:40:00

Mon cas d'utilisation: MacOS , exécutez/réexécuter 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 }')"

stop 2, Stop 3...

réexécuter : "stop1 & stop2 & ... & stopN ; run

pour en savoir plus sur trouver un processus par un port: qui écoute sur un port TCP donné sur Mac OS X?

0
répondu Edan Chetrit 2018-08-07 16:47:29