Comment sortir dans le noeud.js
Quelle est la commande qui est utilisée pour sortir? (j'.e résilier le Nœud.js processus)
16 réponses
Appel mondial process
de l'objet exit
la méthode:
process.exit()
process.de sortie([code])
termine le processus avec le
code
spécifié . Si elle est omise, exit utilise le code "success"0
.pour sortir avec un code "échec":
process.exit(1);
le shell qui a exécuté le noeud doit voir le code de sortie comme 1.
du "officiel 151930920" nodejs.org documentation:
process.exit(code)
termine le processus avec le code spécifié. Si elle est omise, exit utilise le code "success" 0.
pour sortir avec un code "échec":
process.exit(1);
si vous êtes dans un terminal Unix ou une ligne de commande Windows et que vous voulez quitter le noeud REPL, l'un ou l'autre...
- presse Ctrl + c deux fois, ou
- type
.exit
et appuyez sur Entrée, ou - appuyez sur Ctrl + D au début d'une ligne (Unix uniquement)
juste une note que l'utilisation de process.exit([number])
est non recommandé pratique.
la raison pour laquelle ceci est problématique est parce que écrit pour traiter.stdout dans Nœud.js ne sont pas bloquants et peuvent se produire sur plusieurs tiques de la Nœud.js boucle d'événements. Processus appelant.exit(), cependant, les forces de l' processus de sortie avant que ces Écritures supplémentaires à stdout peuvent être effectuer.
plutôt que d'appeler le processus.sortie() directement, le code devrait processus.exitCode et permettre au processus de sortir naturellement en évitant programmer tout travail supplémentaire pour la boucle de l'événement:
si vous pouvez, vous devriez définir le code de sortie et permettre au noeud de sortir avec élégance:
process.exitCode = 1;
de la ligne de commande, .exit
est ce que vous voulez:
$ node
> .exit
$
c'est documenté dans le REPL docs . REPL (Read-Eval-Print-Loop) est le nom de la ligne de commande du noeud.
D'un programme normal, utiliser process.exit([code])
.
cela dépend de la raison pour laquelle vous êtes prêt à quitter le noeud.processus js, mais dans tous les cas process.exit()
est la dernière option pour considérer . Une citation de la documentation:
Il est important de noter que l'appel
process.exit()
forcera l' processus pour sortir le plus rapidement possible, même s'Il ya encore opérations asynchrones en attente qui ne sont pas encore terminées, y compris les opérations D'E/S àprocess.stdout
etprocess.stderr
.Dans la plupart des situations, il n'est pas nécessaire d'appeler
process.exit()
explicitement. nœud.le processus js se terminera tout seul. 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 le processus de sortie code à utiliser lorsque le processus s'arrête normalement.
nous allons couvrir les raisons possibles pour lesquelles vous pourriez être prêt à quitter noeud.js processus et pourquoi vous devriez éviter process.exit()
:
Cas 1 - l'Exécution complète (script de ligne de commande)
si le script a atteint sa fin et que l'interpréteur de noeuds ne sort pas, il indique que certaines opérations asynchrones sont toujours en attente. C'est mal de forcer la fin du processus avec process.exit()
à ce point. Il est préférable d'essayer de comprendre ce qui empêche votre script de sortir de la manière attendue . Et quand vous réglez cela, vous pouvez utiliser process.exitCode
retourne aucun résultat pour le processus appelant.
Case 2-terminaison due à un signal externe (SIGINT / SIGTERM / other)
par exemple, si vous êtes prêt à gracieusement fermer un express app. À la différence du script en ligne de commande, express app continue de tourner à l'infini, en attendant de nouvelles requêtes. process.exit()
sera une mauvaise option, car il va interrompre toutes les demandes qui sont dans le pipeline. Et certains d'entre eux peuvent être non-idempotent (UPDATE, DELETE). Le Client ne saura jamais si ces requêtes sont complétées ou pas du côté du serveur et cela pourrait être la raison de l'incohérence des données entre le client et le serveur. La seule bonne solution est de dire au serveur http de cesser d'accepter de nouvelles requêtes et d'attendre que les requêtes en attente se terminent par 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 elle ne sort toujours pas-voir Cas 1.
Cas 3 - erreur Interne
c'est toujours mieux vaut throw
une erreur, vous obtiendrez un message de trace et d'erreur de pile joliment formaté. Les niveaux supérieurs de code peuvent toujours décider s'ils peuvent gérer l'erreur ( catch
) ou la laisser écraser le processus. De l'autre côté, process.exit(1)
mettra fin au processus silencieusement et il n'y aura aucune chance de récupérer de cela. Il pourrait être le seul "avantage" de process.exit()
, vous pouvez être sûr que le processus sera terminé.
REPL (ligne de commande)
-
Appuyez sur
ctrl + c
deux fois -
Type
.exit
et appuyez sur
Fichier De Script
process.exit(code)
Le noeud sort normalement avec le code 0 lorsqu'il n'y a plus d'opérations asynchrones en attente.
process.exit(1)
doit être utilisé pour sortir avec un code de défaillance.Cela nous permettra de déduire que le noeud ne s'est pas fermé avec élégance et a été forcé de le faire.
il y a d'autres codes de sortie comme
3 - erreur JavaScript interne (très très rare)
5 - erreur Fatale dans le moteur javascript v8
9-argument invalide
pour la liste complète voir sortie du noeud codes
j'ai une application que je voulais:
- Envoyer un courriel à l'utilisateur
- Sortie avec un code d'erreur
j'ai dû accrocher process.exit(code)
à un gestionnaire d'événements exit
, sinon le courrier ne sera pas envoyé car appeler 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); });
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 Boucle D'impression Eval (REPL) , vous pouvez utiliser Ctrl + D , ou tapez .exit
alternativement, sur Windows ou Linux vous pouvez utiliser Ctrl + C , Ctrl + C
Sur Mac, la commande est Ctrl + Z , Ctrl + Z
À la sortie
let exitCode = 1;
process.exit(exitCode)
Utile les codes de sortie
1 - Catchall for general errors 2 - Misuse of shell builtins (according to Bash documentation) 126 - Command invoked cannot execute 127 - “command not found” 128 - Invalid argument to exit 128+n - Fatal error signal “n” 130 - Script terminated by Control-C 255\* - Exit status out of range
comme @Dominic l'a souligné, lancer une erreur non tirée est une meilleure pratique au lieu d'appeler processus.Sortie ([code]) :
process.exitCode = 1;
throw new Error("my module xx condition failed");
Ligne De Commande
presse CTRL + C deux fois
ou
Type .exit
et appuyez sur Entrée
Fichier De Script
process.exit(code)
j'ai été capable d'obtenir tous mes processus de noeud pour mourir directement du shell Bash Git sur Windows 10 en tapant taskkill -F -IM node.exe
- cela met fin à tous les processus de noeud sur mon ordinateur à la fois. J'ai trouvé que je pouvais aussi utiliser taskkill //F //IM node.exe
. Je ne sais pas pourquoi -
et //
fonctionnent dans ce contexte. Espérons que cette aide!
presse Ctrl + C
deux fois
ou .exit
.
>
(To exit, press ^C again or type .exit)
>
si vous voulez sortir de l'application node js, alors écrivez
process.exit(1)
dans votre code
vous pouvez utiliser le procédé .de sortie([code]) de la fonction.
si vous voulez sortir sans 'échec', vous utilisez le code 0
:
process.exit(0);
pour sortir avec un code "echec " 1
vous pouvez exécuter:
process.exit(1);
le code "failure" de la défaillance est propre à la demande. Ainsi, vous pouvez utiliser vos propres conventions.