74 votes

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 essayer le code simple

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)

Donc, deux questions:

1) Comment puis-je fermer node.js gracieusement?

2) Comment puis-je réparer le désordre que j'ai créé?

126voto

EhevuTov Points 6010

J'utilise actuellement un Nœud du système à répondre aux signaux. Voici comment j'utilise la combinaison de touches Ctrl-C (SIGINT) du signal dans un programme:

process.on( 'SIGINT', function() {
  console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
  // some other closing procedures go here
  process.exit( );
})

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.

Sur les systèmes Unix, [Ctrl+Z] est la plus commune de clavier par défaut la cartographie pour la séquence de touches qui suspend un processus (SIGTSTP).[3] Lors de la saisie par un utilisateur sur son terminal d'ordinateur, qui est actuellement l'exécution de processus d'arrière-plan est envoyé un signal SIGTSTP, qui généralement le processus de suspendre son exécution. L'utilisateur peut ensuite poursuivre le processus d'exécution en tapant la commande "fg' (courte pour au premier plan), ou en tapant 'bg' (courte) et en outre en tapant la commande "désavouer" pour séparer les processus d'arrière-plan à partir de le terminal.1

Vous devez tuer vos processus en faisant un kill <pid> ou "killall -9 nœud" ou similaire.

53voto

avstrallen Points 678
  1. Utilisez Ctrl+C pour quitter le nœud de processus

  2. 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:

    1039 ttys000    0:00.11 node index.js
    

    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), alors kill -9 1039 y mettre fin, et vous serez capable de se lier à nouveau le port.

22voto

jkingyens Points 361

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 pour quitter 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.

7voto

Vietnhi Phuvan Points 262

Tapez processus.exit() ou .sortie de sortie de nodejs gracieusement.

Frapper Ctl-C deux fois la force de la sortie.

0voto

Gabriel Llamas Points 5808

1) Comment puis-je fermer node.js gracieusement?

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: la grâce. Il vaut la peine de regarder.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X