Arrêter de fumer node.js gracieusement
Je suis en train de lire par le biais de l'excellent livre en ligne http://nodebeginner.org/ et d'essayer la simple code
var http = require("http");
function onRequest(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
Maintenant, je ne savais pas (et je ne sais toujours pas!) comment arrêter node.js gracieusement, donc je suis juste allé ctrl+z
. Maintenant à chaque fois que j'essaie d'exécuter node server.js
je reçois des messages d'erreur suivants.
node.js:134
throw e; //process.nextTick error, or 'error' event on first tick
^
Error: EADDRINUSE, Address already in use
at Server._doListen (net.js:1100:5)
at net.js:1071:14
at Object.lookup (dns.js:153:45)
at Server.listen (net.js:1065:20)
at Object.<anonymous> (/Users/Bob/server.js:7:4)
at Module._compile (module.js:402:26)
at Object..js (module.js:408:10)
at Module.load (module.js:334:31)
at Function._load (module.js:293:12)
at Array.<anonymous> (module.js:421:10)
Alors, deux questions:
1) Comment puis-je fermer node.js gracieusement?
2) Comment puis-je réparer le désordre que j'ai créé?
- Découvrez la suite de la question Graceful shutdown d'un node.JS serveur HTTP.
- Pour info, ctrl+Z signifie "pause". Après vous l'avez laissé un processus, vous pouvez taper
fg
(pour reprendre normalement), oubg
(à reprendre dans le fond). - en tapant
fg
de bash a très bien fonctionné pour moi sur centOS6 !! beaucoup, beaucoup plus facile que d'être acceptées réponse :DD +2 monsieur, si je pouvais - c'est beaucoup plus facile.
Vous devez vous connecter pour publier un commentaire.
Utiliser Ctrl+C pour quitter le nœud de processus
Pour nettoyer le gâchis dépend de votre plate-forme, mais, fondamentalement, vous avez besoin de trouver les restes d'un processus dans lequel le nœud était en cours d'exécution et le tuer.
Par exemple, sous Unix:
ps -ax | grep node
vous donnera une entrée comme:où
index.js
est le nom de votre nœud de fichier.Dans cet exemple, 1039 est l'id de processus (le vôtre sera différent), donc
kill -9 1039
prendra fin, et vous serez capable de se lier à nouveau le port.kill
envoie le signal SIGTERM qui est couramment utilisé pour démarrer un plus à la fermeture en douceur. unix signauxSIGHUP (1)
,SIGINT (2
),SIGTERM (3)
...SIGKILL (9)
. Leur valeur numérique est directement proportionnelle à leur gravité, et inversement proportionnellement à l'occasion d'un "graceful shutdown" – demande de prêt.kill -9
un.k.un.kill -KILL
, qui prendra fin avec les préjugés (le processus est tout simplement terminé sans avertissement).kill -TERM
de bien vouloir demander un processus se ferme immédiatement,kill -INT
va mettre fin à des choses simples comme la chat,kill -HUP
parfois la cause d'un processus de recharger sa configuration.kill -TERM
FTW.SIGTERM
est presque identique à elle. de Nombreuses discussions découvrez les différences. @Orwellophile niSIGINT
, ni aucun autre signal de la discrimination fondée sur la "simplicité" de processus ou les programmes qu'ils exécutent; vous pouvez en toute sécurité effondrement vos descriptions deSIGTERM
etSIGINT
en un seul, de peur que tu risque de confusion à vos lecteurs.Actuellement, je utiliser un Nœud de l'événement du système à répondre aux signaux. Voici comment j'utilise la combinaison de touches Ctrl-C (SIGINT) du signal dans un programme:
Vous avez été d'obtenir le 'Adresse' erreur parce que Ctrl-Z ne veut pas tuer le programme; simplement, il suspend le processus sur un unix comme système d'exploitation et le nœud programme que vous avez placé dans le fond était encore lié à ce port.
Vous devez tuer vos processus en faisant un
kill <pid>
ou "killall -9 nœud" ou similaire.killall -9
est un peu drastique; je ne vais pas y aller à moins quekillall -INT
ou tout simplementkillall
ne fonctionnent pas.Comme node.js est un événementiel d'exécution le plus gracieux de la sortie d'échappement de la file d'attente des événements. Lorsque l'événement de la file d'attente est vide, le processus prend fin. Vous pouvez vous assurer de la file d'attente d'événements est drainé par faire des choses telles que l'élimination des compteurs d'intervalle et par la fermeture de tous les serveurs à ouvrir les connexions socket. Il est plus difficile lors de l'utilisation de la 3e partie des modules parce que vous êtes à la merci de savoir si le module auteur a pris soin d'gracieusement de vidange dans l'attente des événements qu'il a créé. Cela pourrait ne pas être le plus pratique façon de sortir d'un node.js processus que vous allez dépenser beaucoup d'efforts de suivi en bas de "fuite" dans l'attente des événements, mais il est le plus gracieux, je pense.
Type soit
ou
à la sortie
node
gracieusement.Appuyant sur la touche Contrôle + C deux fois la force de la sortie.
À l'écoute pour le signal SIGINT. Sur Windows, vous devez écouter un ctrl-c avec l'readline module.
J'ai écrit ma propre solution d'en faire une application à la fermeture en douceur et l'utilisation de domaines: grâce. Il vaut la peine de regarder.