Mit welchem Befehl wird das Programm beendet? (dh den Node.js-Prozess beenden)
1867
Rufen Sie die Methode des globalen process
Objekts auf exit
:
process.exit()
process.exit ([Code])
Beendet den Vorgang mit dem angegebenen Wert
code
. Wenn nicht angegeben, verwendet exit den Erfolgscode0
.So beenden Sie das Programm mit einem Fehlercode:
process.exit(1);
Die Shell, die den Knoten ausgeführt hat, sollte den Exit-Code als sehen
1
.
end()
die Anfrage bearbeiten. Sonst hängt es einfach.exit
ist überhaupt nicht irreführend. Sie sind verwirrt darüber, wie Node funktioniert. Stellen Sie sich Node als den Server selbst vor. Es wird nicht nur nach Bedarf gestartet, da sich PHP auf einem Webserver wie Apache befindet. Node muss überhaupt nichts mit Webservern zu tun haben! Es ist nur ein Host für JavaScript, mit einigen raffinierten integrierten Bibliotheken, um nützliche Dinge zu tun.mod_php
Apache ausführen oder verwenden. Sie können ein httpd in PHP erneut implementieren, wie es Node tut, wenn Sie wirklich einen vernünftigeren / standardisierteren Ansatz wie FastCGI möchten oder verwenden, genau wie Sie es in Node können.process.exit()
wird nicht empfohlen , wie beschrieben in dieser Antwort unten .Nur eine Notiz , dass die Verwendung
process.exit([number])
ist nicht die empfohlene Praxis.quelle
process.exit()
ist gedacht.Aus der offiziellen nodejs.org- Dokumentation:
Beendet den Vorgang mit dem angegebenen Code. Wenn nicht angegeben, verwendet exit den Erfolgscode 0.
So beenden Sie das Programm mit einem Fehlercode:
quelle
code = 0; process.exit(code);
code
?process.exit()
ohne Parameter, da der Code standardmäßig 0 istprocess.exit(0);
und es damit ausführennode exit_0.js && echo 'success'
, wird "Erfolg" angezeigt . Wenn Sie exit_1.js mit erstellenprocess.exit(1);
und ausführennode exit_1.js && echo 'success'
, wird nicht "Erfolg" angezeigt, da Ihr Prozess mit einem Wert ungleich Null beendet wurde (was auf einen "Fehler" oder einen "abnormalen Exit" der Shell hinweist). Außerdem werden unterschiedliche Werte angezeigt,$?
wenn Sienode exit_1.js
vs ausführennode exit_0.js
(Sie können dies überprüfen, indem Sie ausführennode exit_1.js
und dann ausführenecho $?
).Wenn Sie sich in einem Unix-Terminal oder einer Windows-Befehlszeile befinden und den Knoten REPL beenden möchten, entweder ...
.exit
und drücken Sie die Eingabetaste, oderquelle
node
REPL ist das Beenden von Strg + D ein Standardverhalten, daher funktioniert es auch unter Windows.Über die Befehlszeile
.exit
möchten Sie Folgendes:Es ist in den REPL-Dokumenten dokumentiert . REPL (Read-Eval-Print-Loop) heißt die Node-Befehlszeile.
Verwenden Sie aus einem normalen Programm
process.exit([code])
.quelle
Dies hängt vom Grund ab, warum Sie bereit sind, den Prozess node.js zu beenden, ist jedoch in jedem Fall
process.exit()
die letzte zu berücksichtigende Option . Ein Zitat aus der Dokumentation:Lassen Sie uns mögliche Gründe behandeln, warum Sie möglicherweise bereit sind, den Prozess node.js zu beenden, und warum Sie Folgendes vermeiden sollten
process.exit()
:Fall 1 - Ausführung abgeschlossen (Befehlszeilenskript)
Wenn das Skript sein Ende erreicht hat und der Knoteninterpreter nicht beendet wird, zeigt dies an, dass einige asynchrone Vorgänge noch ausstehen. Es ist falsch, die Beendigung des Prozesses
process.exit()
an dieser Stelle zu erzwingen . Es ist besser zu versuchen zu verstehen, was Ihr Skript davon abhält, auf erwartete Weise beendet zu werden . Und wenn Sie dies erledigt haben, können Sieprocess.exitCode
jedes Ergebnis an den aufrufenden Prozess zurückgeben.Fall 2 - Beendigung aufgrund eines externen Signals (SIGINT / SIGTERM / other)
Zum Beispiel, wenn Sie bereit sind, eine Express- App ordnungsgemäß herunterzufahren . Im Gegensatz zum Befehlszeilenskript läuft die Express-App unendlich weiter und wartet auf neue Anforderungen.
process.exit()
Dies 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, und dies kann der Grund für Dateninkonsistenzen zwischen Client und Server sein. Die einzig gute Lösung besteht darin, den http-Server anzuweisen, keine neuen Anforderungen mehr anzunehmen und zu warten, bis ausstehende Anfragen abgeschlossen sindserver.close()
:Wenn es immer noch nicht beendet wird - siehe Fall 1.
Fall 3 - Interner Fehler
Es ist immer besser,
throw
einen Fehler zu machen. Sie erhalten eine gut formatierte Stapelverfolgung und eine Fehlermeldung. Obere Codeebenen können immer entscheiden, ob sie error (catch
) behandeln oder den Prozess zum Absturz bringen können. Auf der anderen Seiteprocess.exit(1)
wird der Prozess stillschweigend beendet und es besteht keine Möglichkeit, sich davon zu erholen. Dies ist möglicherweise der einzige „Vorteil“process.exit()
. Sie können sicher sein, dass der Prozess beendet wird.quelle
Process.exit()
sieht für die meisten Anwendungen wie ein großer Overkill aus. Ich suchte nach einem Äquivalent zur die () -Funktion von php ... eher wie:throw new Error('die msg')
REPL (Befehlszeile)
Drücken Sie
ctrl + c
zweimalGeben Sie ein
.exit
und drücken Sie die EingabetasteSkriptdatei
Der Knoten wird normalerweise mit Code 0 beendet, wenn keine asynchronen Operationen mehr anstehen.
process.exit(1)
sollte verwendet werden, um mit einem Fehlercode zu beenden. Dadurch können wir schließen, dass der Knoten nicht ordnungsgemäß geschlossen wurde und zum Schließen gezwungen wurde.Es gibt andere Exit-Codes wie
3 - Interner JavaScript-Analysefehler (sehr, sehr selten)
5 - Schwerwiegender Fehler in der Javascript-Engine der Version 8
9 - Ungültiges Argument
Eine vollständige Liste finden Sie unter Knoten-Exit-Codes
quelle
Ich habe eine Bewerbung, die ich wollte:
Ich musste mich
process.exit(code)
an einenexit
Ereignishandler anschließen, sonst wird die E-Mail nicht gesendet, da einprocess.exit(code)
direkter Aufruf asynchrone Ereignisse beendet.quelle
process.exitCode
mir erstellten Befehlszeilentool (getestet auf Node v4.3.0) für mich zu arbeiten. Aber ich konnte es nicht dazu bringen, sich wie dokumentiert zu verhalten. Dies könnte sehr gut ein Randfall gewesen seincommander
- obwohl github.com/tj/commander.js/… mich wundert. Ich bin mir nicht sicher, ob jemand anderes dieses Problem mit Knoten 4 gesehen hat, aber ich dokumentiere es nur für den Fall, dass ich später darauf zurückgreifen möchte.process.exitCode = 1
der Prozess , selbst wenn Sie ihn festlegen , mit Code 0 beendet wird.Wie @Dominic hervorhob, ist es besser , einen nicht erfassten Fehler auszulösen, anstatt process.exit ([code]) aufzurufen :
process.exitCode = 1; throw new Error("my module xx condition failed");
quelle
Beenden
Nützliche Exit-Codes
quelle
Von Code können Sie verwenden ,
process.exit([errorcode])
wo[errorcode]
eine optionale ganze Zahl (0
ist der Standard Erfolg anzuzeigen).Wenn Sie die Read Eval Print Loop (REPL) verwenden , können Sie Ctrl+ Doder tippen
.exit
Alternativ können Sie unter Windows oder Linux Ctrl+ C, Ctrl+ verwendenC
Auf dem Mac lautet der Befehl Ctrl+ Z, Ctrl+Z
quelle
node --version
v0.10.18
Drücken Sie
Ctrl + C
zweimal oder.exit
.quelle
Ich konnte alle meine Knotenprozesse direkt aus der Git Bash-Shell unter Windows 10 zum Sterben bringen, indem
taskkill -F -IM node.exe
ich tippte - dies beendet alle Knotenprozesse auf meinem Computer auf einmal. Ich fand, ich könnte auch verwendentaskkill //F //IM node.exe
. Nicht sicher, warum beide-
und//
in diesem Zusammenhang arbeiten. Hoffe das hilft!quelle
Da der Prozess ein globales Objekt ist, müssen Sie kein Modul importieren. Die folgende Funktion beendet oder beendet den aktuellen Knotenprozess.
quelle
Ö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,
quelle
Wenn Sie die Anwendung des Knotens js beenden möchten, schreiben Sie
in Ihrem Code
quelle
Das Beenden in Knoten js erfolgt auf zwei Arten:
Wie es funktioniert?
Wenn Sie die Ausführungsschleife zwingen möchten, den Prozess zu stoppen, können Sie den globalen Variablenprozess verwenden, der eine Instanz von EventEmitter ist . Wenn Sie also process.exit () aufrufen, geben Sie tatsächlich das Exit- Ereignis aus, das alle Aufgaben sofort beendet, auch wenn noch keine asynchronen Vorgänge ausgeführt wurden.
process.exit () verwendet 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.
quelle
Wenn Sie sich in Windows befinden, gehen Sie zum Task-Manager, dann zu Prozesse, suchen Sie nach einem Prozess namens "Knoten", klicken Sie mit der rechten Maustaste darauf und klicken Sie dann auf die Option "Prozess beenden".
quelle
Sie können die Funktion process.exit ([Code]) verwenden.
Wenn Sie ohne Fehler beenden möchten, verwenden Sie den folgenden Code
0
:So beenden
1
Sie das Programm mit einem Fehlercode:Der Fehlercode des Fehlers ist anwendungsspezifisch. Sie können also Ihre eigenen Konventionen dafür verwenden.
quelle