Quelle est la commande utilisée pour quitter? (c'est-à-dire terminer le processus Node.js)
1869
Appelez la méthode de process
l'objet global exit
:
process.exit()
process.exit ([code])
Termine le processus avec le spécifié
code
. S'il est omis, exit utilise le code «succès»0
.Pour quitter avec un code «échec»:
process.exit(1);
Le shell qui a exécuté le nœud doit voir le code de sortie comme
1
.
end()
la demander également. Sinon, ça va juste se bloquer.exit
n'est pas du tout trompeur. Vous ne savez pas comment fonctionne Node. Considérez Node comme le serveur lui-même. Il ne se déclenche pas uniquement au besoin, comme PHP se trouve dans un serveur Web comme Apache. Node n'a même rien à voir avec les serveurs Web! C'est juste un hôte pour certains JavaScript, avec quelques bibliothèques intégrées astucieuses pour faire des choses utiles.mod_php
ou d'utiliser Apache. Vous pouvez réimplémenter un httpd en PHP comme le fait le nœud si vous voulez vraiment ou utiliser une approche plus saine / standardisée comme FastCGI comme vous le pouvez dans le nœud.process.exit()
n'est pas recommandé , comme décrit dans cette réponse ci-dessous .Juste une note que l'utilisation
process.exit([number])
n'est pas recommandée .la source
process.exit()
est prévu.De la documentation officielle de nodejs.org :
Termine le processus avec le code spécifié. S'il est omis, exit utilise le code «succès» 0.
Pour quitter avec un code «échec»:
la source
code = 0; process.exit(code);
code
?process.exit()
sans paramètre car le code par défaut est 0process.exit(0);
et l'exécutez avec,node exit_0.js && echo 'success'
il dira "succès". Si vous créez exit_1.js avecprocess.exit(1);
et exécutez,node exit_1.js && echo 'success'
il ne dira pas "succès" puisque votre processus s'est terminé avec un non-zéro (ce qui indique une "panne" ou une "sortie anormale" au shell). De plus, vous verrez différentes valeurs dans$?
si vous exécuteznode exit_1.js
vsnode exit_0.js
(vous pouvez vérifier en faisantnode exit_1.js
puis en faisantecho $?
).Si vous êtes dans un terminal Unix ou une ligne de commande Windows et que vous souhaitez quitter le Node REPL, soit ...
.exit
et appuyez sur Entrée, oula source
node
REPL, Ctrl + D pour quitter est un comportement standard, donc cela fonctionne également sur Windows.A partir de la ligne de commande,
.exit
c'est ce que vous voulez:Il est documenté dans les documents REPL . REPL (Read-Eval-Print-Loop) est ce que la ligne de commande Node est appelée.
À partir d'un programme normal, utilisez
process.exit([code])
.la source
Cela dépend de la raison pour laquelle vous êtes prêt à quitter le processus node.js, mais dans tous les cas,
process.exit()
c'est la dernière option à considérer . Une citation de la documentation:Voyons 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 ferme pas, cela indique que certaines opérations asynchrones sont toujours en attente. Il est faux de forcer l'arrêt du processus
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 utiliserprocess.exitCode
pour renvoyer n'importe quel résultat au processus d'appel.Cas 2 - Résiliation en raison d'un signal externe (SIGINT / SIGTERM / autre)
Par exemple, si vous êtes prêt à fermer gracieusement une application express . Contrairement au script de ligne de commande, l'application express continue de fonctionner indéfiniment, en attendant de nouvelles demandes.
process.exit()
sera une mauvaise option ici car cela va interrompre toutes les demandes en cours de traitement. Et certains d'entre eux peuvent ê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 ne plus accepter de nouvelles requêtes et d'attendre que les requêtes en attente se terminent parserver.close()
:S'il ne se ferme toujours pas - voir le cas 1.
Cas 3 - Erreur interne
Il vaut toujours mieux
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 error (catch
) ou le laisser planter le processus. De l'autre côté,process.exit(1)
le processus se terminera en silence et il n'y aura aucune chance de s'en remettre. C'est peut-être le seul «avantage» deprocess.exit()
, vous pouvez être sûr que le processus sera terminé.la source
Process.exit()
ressemble à une surpuissance majeure pour la plupart des applications. Je cherchais un équivalent à la fonction die () de php ... plus comme:throw new Error('die msg')
REPL (ligne de commande)
Appuyez
ctrl + c
deux foisTapez
.exit
et appuyez sur EntréeFichier de script
Le nœud se termine normalement avec le code 0 lorsqu'aucune opération asynchrone n'est en attente.
process.exit(1)
devrait être utilisé pour quitter avec un code d'échec. Cela nous permettra de déduire que le nœud ne s'est pas fermé correctement et a été forcé de se fermer.Il existe d'autres codes de sortie comme
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 les codes de sortie des nœuds
la source
J'ai une application que je voulais:
J'ai dû me connecter
process.exit(code)
à unexit
gestionnaire d'événements, sinon le courrier ne sera pas envoyé car l'appelantprocess.exit(code)
tue directement les événements asynchrones.la source
process.exitCode
au travail dans un outil en ligne de commande que je construis (testé sur Node v4.3.0). Mais je ne pouvais pas le faire se comporter comme documenté. Cela aurait très bien pu être un cas de pointe aveccommander
- bien que github.com/tj/commander.js/… me fasse me demander. Je ne sais pas si quelqu'un d'autre a vu ce problème avec le noeud 4, mais documentant juste au cas où il serait utilisé ultérieurement.process.exitCode = 1
, le processus seComme l'a souligné @Dominic, il est préférable de lancer une erreur non interceptée au lieu d'appeler process.exit ([code]) :
process.exitCode = 1; throw new Error("my module xx condition failed");
la source
Pour quitter
Codes de sortie utiles
la source
À partir du code, vous pouvez utiliser
process.exit([errorcode])
où[errorcode]
est un entier facultatif (0
c'est la valeur par défaut pour indiquer le succès).Si vous utilisez la boucle de lecture Eval (REPL) , vous pouvez utiliser Ctrl+ Dou taper
.exit
Alternativement, sur Windows ou Linux, vous pouvez utiliser Ctrl+ C, Ctrl+C
Sur Mac, la commande est Ctrl+ Z, Ctrl+Z
la source
node --version
v0.10.18
Appuyez
Ctrl + C
deux fois sur ou.exit
.la source
J'ai pu faire en sorte que tous mes processus de nœuds meurent directement à partir du shell Git Bash sur Windows 10 en tapant
taskkill -F -IM node.exe
- cela met fin à tous les processus de nœuds sur mon ordinateur à la fois. J'ai trouvé que je pouvais aussi utilisertaskkill //F //IM node.exe
. Je ne sais pas pourquoi les deux-
et//
fonctionnent dans ce contexte. J'espère que cela t'aides!la source
Comme le processus est un objet global, vous n'avez pas besoin d'importer de module. La fonction suivante quitte ou tue le processus de nœud actuel.
la source
Ouvrez le terminal de ligne de commande sur lequel s'exécute l'application de noeud et appuyez sur Ctrl + C
si vous voulez quitter une application node js du code,
la source
si vous voulez quitter l'application node js, écrivez
dans votre code
la source
La sortie dans le noeud js se fait de deux manières:
Comment ça fonctionne?
Si vous souhaitez forcer la boucle d'exécution à arrêter le processus, vous pouvez utiliser le processus de variable globale qui est une instance d' EventEmitter . Ainsi, lorsque vous appelez process.exit (), vous émettez en fait l' événement exit qui met fin à toutes les tâches immédiatement même s'il n'y a toujours pas d'opérations asynchrones.
process.exit () prend un code de sortie (Integer) comme paramètre. Le code 0 est la valeur par défaut et cela signifie qu'il se termine avec un «succès». Alors que le code 1 signifie qu'il se termine avec un «échec».
la source
Si vous êtes sous Windows, allez dans le Gestionnaire des tâches, puis allez dans Processus, recherchez un processus appelé "nœud", puis cliquez dessus avec le bouton droit de votre souris puis cliquez sur l'option "Terminer le processus".
la source
Vous pouvez utiliser la fonction process.exit ([code]) .
Si vous souhaitez quitter sans «échec», vous utilisez le code
0
:Pour quitter avec un code «échec»,
1
vous pouvez exécuter:Le code «échec» de l'échec est spécifique à l'application. Vous pouvez donc utiliser vos propres conventions pour cela.
la source