Was ist der Befehl, der zum Beenden verwendet wird? (d. h. den Node.js-Prozess beenden)
Rufen Sie die globale process
object's exit
Methode auf:
process.exit()
prozess.exit ([Code])
Beendet den Prozess mit der angegebenen
code
. Wenn nicht angegeben, verwendet exit den Code 'success'0
.Um mit einem Fehlercode zu beenden:
process.exit(1);
Die Shell, die den Knoten ausgeführt hat, sollte den Exit-Code als 1 sehen.
Aus der offiziellen nodejs.org Dokumentation:
process.exit(code)
Beendet den Prozess mit dem angegebenen Code. Wenn nicht angegeben, verwendet exit den Code 0 für den Erfolg.
Um mit einem Fehlercode zu beenden:
process.exit(1);
Wenn Sie sich in einem Unix-Terminal oder einer Windows-Befehlszeile befinden und Node REPL beenden möchten, können Sie entweder ...
.exit
ein und drücken Sie die Eingabetaste oderNur ein Hinweis, dass die Verwendung von process.exit([number])
nicht empfohlen praktiziert.
Beim Aufruf von process.exit () wird der Prozess so schnell wie .__ beendet. möglich, auch wenn noch asynchrone Operationen anstehen. noch nicht vollständig abgeschlossen, einschließlich der E/A-Vorgänge für process.stdout und process.stderr.
In den meisten Situationen ist es nicht unbedingt erforderlich, Aufzurufen. process.exit () explizit. Der Node.js-Prozess wird von selbst beendet, wenn In der Ereignisschleife steht keine zusätzliche Arbeit aus. Das Die process.exitCode -Eigenschaft kann festgelegt werden, um dem Prozess mitzuteilen, welcher Exit Code, der verwendet werden soll, wenn der Prozess ordnungsgemäß beendet wird.
Das folgende Beispiel zeigt beispielsweise einen missbrauch der process.exit () -Methode, die dazu führen könnte, dass Daten als stdout ausgegeben werden abgeschnitten und verloren:
// This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); process.exit(1); }
Der Grund dafür ist problematisch ist, weil Schreibvorgänge in Node.js für process.stdout sind manchmal asynchron und kann über mehrere Ticks der .__ auftreten. Node.js-Ereignisschleife. Der Aufruf von process.exit () erzwingt jedoch die Prozess zum Beenden, bevor diese zusätzlichen Schreibvorgänge in stdout .__ sein können. durchgeführt.
Anstatt process.exit () direkt aufzurufen, sollte der Code die .__ festlegen. process.exitCode und lassen Sie den Prozess auf natürliche Weise beenden, indem Sie .__ vermeiden. Planen Sie zusätzliche Arbeit für die Ereignisschleife:
// How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
Von der Befehlszeile aus möchten Sie .exit
:
$ node
> .exit
$
Es ist in den Dokumenten REPL dokumentiert dokumentiert. REPL (Read-Eval-Print-Loop) heißt die Node-Befehlszeile.
Verwenden Sie in einem normalen Programm process.exit([code])
.
Es hängt von dem Grund ab, warum Sie bereit sind, den node.js-Prozess zu beenden, aber in jedem Fall ist process.exit()
die letzte Option, die zu berücksichtigen ist. Ein Zitat aus der Dokumentation:
Es ist wichtig zu beachten, dass der Aufruf von
process.exit()
die .__ erzwingt. Prozess so schnell wie möglich zu beenden, auch wenn noch noch nicht vollständig abgeschlossene asynchrone Operationen, einschließlich E/A-Operationen fürprocess.stdout
undprocess.stderr
.In den meisten Situationen ist es nicht unbedingt erforderlich, Aufzurufen.
process.exit()
ausdrücklich. Der Node.js-Prozess wird auf eigene Faust beendet wenn in der Ereignisschleife keine zusätzlichen Arbeiten anstehen. Das Dieprocess.exitCode
-Eigenschaft kann festgelegt werden, um dem Prozess mitzuteilen, welcher Exit Code, der verwendet werden soll, wenn der Prozess ordnungsgemäß beendet wird.
Lassen Sie uns mögliche Gründe erläutern, warum Sie möglicherweise den node.js-Prozess beenden und process.exit()
vermeiden sollten:
Wenn das Skript sein Ende erreicht hat und der Knoteninterpreter nicht beendet wird, weist dies darauf hin, dass einige asynchrone Operationen noch ausstehen. Es ist falsch, die Prozessbeendigung an diesem Punkt mit process.exit()
zu erzwingen. Versuchen Sie besser zu verstehen, was verhindert, dass Ihr Skript wie erwartet beendet wird . Und wenn Sie dies erledigt haben, können Sie process.exitCode
verwenden, um Ergebnisse an den aufrufenden Prozess zurückzugeben.
Zum Beispiel, wenn Sie bereit sind, eine express -App ordnungsgemäß herunterzufahren. Im Gegensatz zum Kommandozeilen-Skript läuft die Express-App unendlich lange und wartet auf neue Anfragen. process.exit()
ist hier eine schlechte Option, da alle in der Pipeline befindlichen Anforderungen unterbrochen werden. Und einige von ihnen sind möglicherweise nicht idempotent (UPDATE, DELETE). Der Client wird nie erfahren, ob diese Anforderungen auf der Serverseite abgeschlossen sind oder nicht. Dies kann der Grund für die Inkonsistenz der Daten zwischen Client und Server sein. Die einzig gute Lösung ist, dem http-Server mitzuteilen, dass er keine neuen Anforderungen mehr annehmen und warten muss, bis ausstehende mit server.close()
abgeschlossen ist:
var express = require('express');
var app = express();
var server = app.listen(80);
process.on( 'SIGTERM', function () {
server.close(function () {
console.log("Finished all requests");
});
});
Wenn es immer noch nicht beendet wird - siehe Fall 1.
Es ist immer besser, einen Fehler zu throw
zu geben. Sie erhalten eine gut formatierte Stack-Ablaufverfolgung und eine Fehlermeldung. Obere Codeebenen können immer entscheiden, ob sie mit Fehlern (catch
) umgehen können oder den Prozess zum Absturz bringen. Auf der anderen Seite wird process.exit(1)
den Prozess still beenden und es besteht keine Chance, sich davon zu erholen. Es kann der einzige „Vorteil“ von process.exit()
sein. Sie können sicher sein, dass der Prozess beendet wird.
REPL (Befehlszeile)
Drücken Sie zweimal ctrl + c
Geben Sie .exit
ein und drücken Sie die Eingabetaste
Skriptdatei
process.exit(code)
Der Knoten wird normalerweise mit code 0 beendet, wenn keine weiteren asynchronen Operationen anstehen.
process.exit(1)
sollte zum Beenden mit einem Fehlercode verwendet werden. Dies erlaubt uns zu folgern, dass der Knoten nicht ordnungsgemäß geschlossen wurde und gezwungen wurde, zu schließen.
Es gibt andere Exit-Codes wie
3 - Interner JavaScript-Parse-Fehler (sehr, sehr selten)
5 - Schwerwiegender Fehler in der V8-JavaScript-Engine
9 - Ungültiges Argument
Für eine vollständige Liste siehe Knoten-Exit-Codes
Ich habe eine Bewerbung, die ich wollte:
Ich musste process.exit(code)
an einen exit
-Ereignishandler anhängen, andernfalls wird die Mail nicht gesendet, da der Aufruf von process.exit(code)
direkt asynchrone Ereignisse abbricht.
#!/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); });
Drücken Sie zweimal Ctrl + C
oder .exit
.
>
(To exit, press ^C again or type .exit)
>
Aus Code können Sie process.exit([errorcode])
verwenden, wobei [errorcode]
eine optionale Ganzzahl ist (0
ist die Standardeinstellung, um den Erfolg anzuzeigen).
Wenn Sie die Read Eval Print Loop (REPL) verwenden, können Sie verwenden Ctrl + D, oder tippe .exit
Alternativ können Sie unter Windows oder Linux verwenden Ctrl + C, Ctrl + C
Auf dem Mac lautet der Befehl Ctrl + Z, Ctrl + Z
Wie @Dominic hervorgehoben hat, ist einen nicht abgefangenen Fehler auszulösen eine bessere Vorgehensweise, anstatt process.exit ([code]) aufzurufen:process.exitCode = 1;
throw new Error("my module xx condition failed");
Beenden
let exitCode = 1;
process.exit(exitCode)
Nützliche Beendigungscodes
1 - Catchall für allgemeine Fehler 2 - Missbrauch von Shell-Builds (gemäß Bash-Dokumentation) 126 - Befehl kann nicht ausgeführt werden 127 - "Befehl nicht gefunden" 128 - Ungültiges Argument zum Beenden 128 + n - Schwerwiegendes Fehlersignal "n" 130 - Skript durch Control-C beendet 255\* - Status außerhalb des Bereichs
Befehlszeile
Drücken Sie zweimal CTRL + C
OR
Geben Sie .exit
ein und drücken Sie die Eingabetaste
Skriptdatei
process.exit(code)
Ich konnte alle meine Knotenprozesse direkt von der Git Bash-Shell unter Windows 10 sterben lassen, indem Sie taskkill -F -IM node.exe
eingeben. Dadurch werden alle Knotenprozesse auf meinem Computer gleichzeitig beendet. Ich fand, ich könnte auch taskkill //F //IM node.exe
verwenden. Nicht sicher, warum sowohl -
als auch //
in diesem Zusammenhang funktionieren. Hoffe das hilft!
wenn Sie die Anwendung von Knoten js verlassen möchten, schreiben Sie
process.exit(1)
in Ihrem Code
Da der Prozess ein globales Objekt ist, müssen Sie kein Modul importieren. Die folgende Funktion beendet oder bricht den aktuellen Knotenprozess ab.
process.exit (Code)
process.kill (process.pid)
process.abort ()
Öffnen Sie das Befehlszeilenterminal, auf dem die Knotenanwendung ausgeführt wird, und drücken Sie Strg + C
wenn Sie eine Knoten-js-Anwendung aus dem Code beenden möchten,
process.exit(); // graceful termination
process.exit(1); // non graceful termination
Wenn Sie die Ausführungsschleife zwingen möchten, den Prozess anzuhalten, können Sie die globale Variable process verwenden, die eine Instanz von EventEmitter ist. Wenn Sie also process.exit () aufrufen, geben Sie tatsächlich das Ereignis exit aus, das alle Tasks sofort beendet, auch wenn noch keine asynchronen Vorgänge ausgeführt wurden.
process.exit () nimmt einen Exit-Code (Integer) als Parameter. Der Code 0 ist die Standardeinstellung und bedeutet, dass er mit einem "Erfolg" beendet wird. Während der Code 1 bedeutet, dass er mit einem "Fehler" beendet wird.
Sie können die Funktion process.exit ([code]) verwenden.
Wenn Sie den Vorgang ohne einen Fehler beenden möchten, verwenden Sie den Code 0
:
process.exit(0);
Um den Fehlercode 1
zu verlassen, können Sie Folgendes ausführen:
process.exit(1);
Der Fehlercode des Fehlers ist anwendungsspezifisch. Sie können also Ihre eigenen Konventionen dafür verwenden.