Quelle est la commande utilisée pour sortir? (c'est-à-dire terminer le processus Node.js)
Appelez la méthode globale process
object's exit
:
process.exit()
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.
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);
Si vous êtes sur un terminal Unix ou sur une ligne de commande Windows et que vous voulez quitter le Node REPL, soit ...
.exit
et appuyez sur Entrée, ouIl 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; }
.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])
.
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 surprocess.stdout
etprocess.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()
:
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.
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.
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é.
REPL (ligne de commande)
Appuyez sur ctrl + c
deux 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
J'ai une application que je voulais:
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); });
Appuyez deux fois sur Ctrl + C
Ou .exit
.
>
(To exit, press ^C again or type .exit)
>
À partir du code, vous pouvez utiliser process.exit([errorcode])
où [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 + C, Ctrl + C
Sur Mac, la commande est Ctrl + Z, Ctrl + Z
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");
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
Ligne de commande
Appuyez sur CTRL + C deux fois
OR
Tapez .exit
et appuyez sur enter
Fichier de script
process.exit(code)
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!
si vous voulez quitter l'application noeud js, écrivez
process.exit(1)
dans votre code
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 ()
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
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'.
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.