Question Comment quitter dans Node.js


Quelle est la commande utilisée pour quitter? (i.e termine le processus node.js)


1359
2018-03-10 21:30


origine


Réponses:


Appelez le mondial process objets exit méthode:

process.exit()

De la docs:

process.exit ([code])

Termine le processus avec le spécifié code. Si omis, exit utilise le code 'succès' 0.

Pour quitter avec un code 'échec':

process.exit(1);

Le shell qui a exécuté le noeud devrait voir le code de sortie 1.


1693
2018-03-10 21:36



De l'officiel nodejs.org Documentation:

process.exit(code)

Termine le processus avec le code spécifié. Si omis, exit utilise le code 'succès' 0.

Pour quitter avec un code 'échec':

process.exit(1);

320
2018-03-22 18:48



Si vous êtes dans un terminal Unix ou une ligne de commande Windows et que vous voulez quitter le Node REPL, soit ...

  • presse Ctrl + C deux fois, ou
  • type .exit et appuyez sur Entrée, ou
  • presse Ctrl +  au début d'une ligne (Unix uniquement)

236
2018-06-02 13:02



Juste une note que l'utilisation process.exit([number]) est non recommandé entraine toi.

La raison pour laquelle ceci est problématique est parce que écrit dans process.stdout dans   Node.js sont non-bloquants et peuvent se produire sur plusieurs ticks du   Boucle d'événement Node.js Cependant, appeler process.exit () force le   processus pour quitter avant que ces écritures supplémentaires à stdout peuvent être   effectué.

Plutôt que d'appeler directement process.exit (), le code doit définir   process.exitCode et permet au processus de quitter naturellement en évitant   planifier tout travail supplémentaire pour la boucle d'événement:

Si vous le pouvez, vous devez définir le code de sortie et autoriser le noeud à quitter normalement:

process.exitCode = 1;

175
2017-07-06 05:52



De la ligne de commande, .exit est ce que tu veux:

$ node
> .exit
$

Il est documenté dans le Documents REPL. REPL (Read-Eval-Print-Loop) est ce que la ligne de commande Node est appelée.

D'un programme normal, utilisez process.exit([code]).


109
2017-10-29 16:51



Cela dépend de la raison pour laquelle vous êtes prêt à quitter le processus node.js, mais dans tous les cas process.exit() est le dernière option à considérer. Une citation de la documentation:

Il est important de noter que l'appel process.exit() va forcer le   processus pour quitter le plus rapidement possible même s'il y a encore   opérations asynchrones en attente qui ne sont pas encore terminées complètement,   y compris les opérations d'E / S à process.stdout et process.stderr.

Dans la plupart des cas, il n'est pas nécessaire d'appeler    process.exit() explicitement. Le processus Node.js sortira seul   s'il n'y a pas de travail supplémentaire en attente dans la boucle d'événement. le    process.exitCode la propriété peut être définie pour indiquer le processus qui sort   code à utiliser lorsque le processus se termine avec élégance.

Couvrons les raisons possibles pour lesquelles vous pourriez vouloir quitter le processus node.js et pourquoi vous devriez éviter process.exit():

Cas 1 - Exécution terminée (script de ligne de commande)

Si le script a atteint sa fin et que l'interpréteur de noeud ne se termine pas, cela indique que certaines opérations asynchrones sont toujours en attente. Il est faux de forcer la fin du processus avec process.exit() À ce point. Il vaut mieux essayer de comprendre ce qui empêche votre script de sortir de manière attendue. Et quand vous réglez cela, vous pouvez utiliser process.exitCoderenvoyer tout résultat au processus d'appel.

Cas 2 - Résiliation à cause d'un signal externe (SIGINT / SIGTERM / autre)

Par exemple, si vous êtes prêt à fermer gracieusement un Express app. Contrairement au script de ligne de commande, l'application express continue de fonctionner à l'infini, en attendant de nouvelles demandes. process.exit() sera une mauvaise option ici car il va interrompre toutes les requêtes qui sont en pipeline. Et certains d'entre eux pourraient être non-idempotent (UPDATE, DELETE). Le client ne saura jamais si ces demandes sont terminées ou non côté serveur et cela peut être la raison de l'incohérence des données entre le client et le serveur. La seule bonne solution consiste à dire au serveur http d'arrêter d'accepter de nouvelles requêtes et d'attendre que les requêtes en attente se terminent avec server.close():

var express = require('express');
var app = express();
var server = app.listen(80);

process.on( 'SIGTERM', function () {
   server.close(function () {
     console.log("Finished all requests");
   });
});

S'il ne sort toujours pas - voir Cas 1.

Cas 3 - Erreur interne

C'est toujours mieux de throw une erreur, vous obtiendrez une trace de pile bien formatée et un message d'erreur. Les niveaux supérieurs de code peuvent toujours décider s'ils peuvent gérer l'erreur (catch) ou laissez-le planter le processus. D'un autre côté, process.exit(1) terminera le processus en silence et il n'y aura aucune chance de récupérer de cela. Ce pourrait être le seul "avantage" de process.exit(), vous pouvez être sûr que ce processus sera terminé.


55
2018-02-06 17:38



REPL(Ligne de commande)

  • presse ctrl + c  deux fois

  • Type .exit et appuyez sur Entrée

Fichier de script

process.exit(code)

Le nœud sort normalement avec code 0 quand aucune autre opération asynchrone n'est en attente.

process.exit(1) devrait être utilisé pour sortir avec un code d'échec. Cela nous permettra d'inférer que le nœud ne s'est pas fermé normalement et a été forcé de se fermer.

Il existe d'autres codes de sortie

3 - Erreur d'analyse JavaScript interne (très très rare)

5 - Erreur fatale dans le moteur javascript v8

9 - Argument invalide

Pour la liste complète, voir codes de sortie de noeud


22
2018-02-09 05:36



J'ai une application que je voulais:

  1. Envoyer un email à l'utilisateur
  2. Quitter avec un code d'erreur

Je devais accrocher process.exit(code) à un exit gestionnaire d'événement, sinon le courrier ne sera pas envoyé depuis l'appel process.exit(code) tue directement les événements asynchrones.

#!/usr/bin/nodejs
var mailer = require('nodemailer');
var transport = mailer.createTransport();
mail = {
  to: 'Dave Bowman',
  from: 'HAL 9000',
  subject: 'Sorry Dave',
  html: 'Im sorry, Dave. Im afraid I cant do <B>THAT</B>.'
}
transport.sendMail(mail);
//process.exit(1);
process.on('exit', function() { process.exit(1); });

12
2017-12-06 01:15



À partir du code, vous pouvez utiliser process.exit([errorcode]) où [errorcode] est un entier optionnel (0 est la valeur par défaut pour indiquer le succès).

Si vous utilisez le Lire Eval Print Loop (REPL), vous pouvez utiliser Ctrl + ou tapez .exit

Alternativement, sous Windows ou Linux, vous pouvez utiliser Ctrl + C, Ctrl + C

Sur Mac, la commande est Ctrl + Z, Ctrl + Z


6
2018-06-10 01:05