web-dev-qa-db-fra.com

Comment sortir dans Node.js

Quelle est la commande utilisée pour sortir? (c'est-à-dire terminer le processus Node.js)

1526
George Bailey

Appelez la méthode globale process object's exit :

process.exit()

À partir de la documentation:

process.exit ([code])

Termine le processus avec la variable code spécifiée. Si omis, exit utilise le code 'success' 0.

Pour sortir avec un code 'échec':

process.exit(1);

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

1932
Pero P.

De la documentation officielle nodejs.org :

process.exit(code)

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

Pour sortir avec un code 'échec':

process.exit(1);
342
alienhard

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

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

Il suffit de noter que l’utilisation de process.exit([number]) est déconseillé pratique.

L'appel de process.exit () forcera le processus à se terminer aussi rapidement que possible même s'il y a toujours des opérations asynchrones en attente de cela ne sont pas encore complètement terminés, y compris les opérations d'E/S jusqu'à process.stdout et process.stderr.

Dans la plupart des situations, il n'est pas réellement nécessaire d'appeler process.exit () explicitement. Le processus Node.js se terminera par lui-même si il n'y a pas de travail supplémentaire en attente dans la boucle d'événements. Le La propriété process.exitCode peut être définie pour indiquer au processus quelle sortie code à utiliser lorsque le processus se termine normalement.

Par exemple, l'exemple suivant illustre une mauvaise utilisation du fichier process.exit () qui pourrait entraîner l’impression de données sur la sortie standard tronqué et perdu:

// This is an example of what *not* to do:
if (someConditionNotMet()) {
  printUsageToStdout();
  process.exit(1);
}

La raison pour laquelle c'est problème est parce que les écritures dans process.stdout dans Node.js sont parfois asynchrone et peut se produire sur plusieurs ticks de la Boucle d'événement Node.js. L'appel de process.exit (), cependant, force le processus pour quitter avant que ces écritures supplémentaires sur stdout puissent être effectué.

Plutôt que d'appeler directement process.exit (), le code devrait définir le process.exitCode et laissez le processus se terminer naturellement en évitant Planification de tout travail supplémentaire pour la boucle d'événement:

// How to properly set the exit code while letting
// the process exit gracefully.
if (someConditionNotMet()) {
  printUsageToStdout();  
  process.exitCode = 1;
}
244
Dominic

.exit est ce que vous voulez dans la ligne de commande:

$ node
> .exit
$

C'est documenté dans la documentation REPL . REPL (Lecture-Evaluation-Impression-Boucle) correspond à ce que la ligne de commande du noeud est appelée.

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

113
Mike M. Lin

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 à prendre en compte} _. Une citation de la documentation:

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

Dans la plupart des situations, il n'est pas réellement nécessaire d'appeler process.exit() explicitement. Le processus Node.js se terminera par lui-même s'il n'y a pas de travail supplémentaire en attente dans la boucle d'événement. Le La propriété process.exitCode peut être définie pour indiquer au processus quelle sortie code à utiliser lorsque le processus se termine normalement.

Voyons maintenant les raisons possibles pour lesquelles vous êtes prêt à quitter le processus node.js et pour lesquelles 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 ferme pas, cela signifie que certaines opérations asynchrones sont toujours en attente. Il est faux de forcer la fin du processus avec process.exit() à ce stade. Il est préférable d’essayer de comprendre ce qui empêche votre script de se terminer de la manière attendue . Et lorsque vous réglez cela, vous pouvez utiliser process.exitCode pour renvoyer tout résultat au processus appelant.

Cas 2 - Résiliation en raison d'un signal externe (SIGINT/SIGTERM/other)

Par exemple, si vous êtes prêt à fermer gracieusement une application express. Contrairement aux scripts de ligne de commande, Express app continue de fonctionner à l'infini, dans l'attente de nouvelles demandes. process.exit() sera une mauvaise option ici car il va interrompre toutes les requêtes en cours de traitement. Et certains d'entre eux pourraient être non-idempotents (UPDATE, DELETE). Le client ne saura jamais si ces demandes sont terminées ou non côté serveur et cela pourrait ê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 de cesser d'accepter de nouvelles demandes et d'attendre que les demandes 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");
   });
});

Si le problème persiste, voir le cas 1.

Cas 3 - Erreur interne

Il est toujours préférable de throw une erreur, vous obtiendrez une trace de pile bien formatée et un message d'erreur. Les niveaux de code supérieurs peuvent toujours décider s’ils peuvent gérer les erreurs (catch) ou s’ils le font planter en panne. De l'autre côté, process.exit(1) mettra fin au processus en silence et il n'y aura aucune chance de récupérer. Ce peut être le seul «avantage» de process.exit(), vous pouvez être sûr que ce processus sera terminé.

63
teq

REPL (ligne de commande)

  • Appuyez sur ctrl + cdeux fois

  • Tapez .exit et appuyez sur enter

Fichier de script

process.exit(code)

Le noeud se ferme normalement avec code 0 quand il n'y a plus d'opération asynchrone en attente.

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

Il y a d'autres codes de sortie comme

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

5 - Erreur fatale dans le moteur javascript de la v8

9 - Argument invalide

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

23
Siva Prakash

J'ai une application que je voulais:

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

Je devais connecter process.exit(code) à un gestionnaire d'événements exit, sinon le courrier ne serait pas envoyé car l'appel de 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
Stephen Quan

Appuyez deux fois sur Ctrl + C Ou .exit.

> 
(To exit, press ^C again or type .exit)
> 
7
HeadAndTail

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

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

Sinon, sous Windows ou Linux, vous pouvez utiliser Ctrl + CCtrl + C

Sur Mac, la commande est Ctrl + ZCtrl + Z

7
zzzzBov

Comme @Dominic l'a souligné, jeter une erreur non interceptée est une meilleure pratique que d'appeler process.exit ([code]):
process.exitCode = 1; throw new Error("my module xx condition failed");

7
MANN

Pour quitter

let exitCode = 1;
process.exit(exitCode)

Codes de sortie utiles

. 1 pour quitter 
 128 + n - Signal d'erreur irrécupérable «n» 
 130 - Script terminé par Control-C 
 255\* - État de sortie hors limites 
6
Denis Lisitskiy

Ligne de commande

Appuyez sur CTRL + C deux fois

OR

Tapez .exit et appuyez sur enter

Fichier de script

process.exit(code)
3
Farhan Yaseen

J'ai réussi à faire en sorte que tous mes processus de nœud meurent directement à partir du shell Git Bash sous Windows 10 en tapant taskkill -F -IM node.exe - cela met fin à tous les processus de nœud sur mon ordinateur. J'ai trouvé que je pouvais aussi utiliser taskkill //F //IM node.exe. Vous ne savez pas pourquoi - et // fonctionnent dans ce contexte. J'espère que cela t'aides!

3
Alison Stuart

si vous voulez quitter l'application noeud js, écrivez

process.exit(1)

dans votre code

0
Ajay Mudaliyar

Comme le processus est un objet global, vous n'avez pas besoin d'importer de module. La fonction suivante permet de quitter ou de tuer le processus de noeud actuel.

process.exit (code)

process.kill (process.pid)

process.abort ()

0
sumit_suthar

Ouvrez le terminal en ligne de commande où l'application de noeud est en cours d'exécution et appuyez sur la touche Ctrl + C

si vous voulez quitter une application de noeud js du code,

process.exit(); // graceful termination 
process.exit(1); // non graceful termination 
0
Shekar Mania

La sortie dans le noeud js se fait de deux manières:

  • Appeler process.exit () explicitement.
  • Ou bien, si la boucle d'événements nodejs est effectuée avec toutes les tâches et qu'il ne reste plus rien à faire. Ensuite, l'application de nœud se fermera automatiquement.

Comment ça marche?

Si vous souhaitez forcer la boucle d'exécution à arrêter le processus, vous pouvez utiliser la variable globale-process qui est une instance de EventEmitter . Ainsi, lorsque vous appelez process.exit () vous émettez en fait l'événement exit qui termine immédiatement toutes les tâches, même s'il reste des opérations asynchrones non effectuées.

process.exit () prend un code de sortie (Integer) en tant que paramètre. Le code 0 est la valeur par défaut, ce qui signifie qu'il se termine avec un «succès». Alors que le code 1 signifie qu'il se termine avec un 'échec'.

0
majid jiji

Vous pouvez utiliser process.exit ([code]) function.

Si vous voulez quitter sans "échec", vous utilisez le code 0:

process.exit(0);

Pour quitter avec un code 'échec' 1, vous pouvez exécuter:

process.exit(1);

Le code "échec" de l'échec est spécifique à l'application. Vous pouvez donc utiliser vos propres conventions pour cela.

0
Oleksii Trekhleb