wake-up-neo.net

So beenden Sie Node.js

Was ist der Befehl, der zum Beenden verwendet wird? (d. h. den Node.js-Prozess beenden)

1526
George Bailey

Rufen Sie die globale process object's exit Methode auf:

process.exit()

Aus den Dokumenten:

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.

1932
Pero P.

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);
342
alienhard

Wenn Sie sich in einem Unix-Terminal oder einer Windows-Befehlszeile befinden und Node REPL beenden möchten, können Sie entweder ...

  • Drücken Sie Ctrl + C zweimal oder
  • geben Sie .exit ein und drücken Sie die Eingabetaste oder
  • drücken Sie Ctrl + D am Zeilenanfang (nur Unix)
254
Mohsen

Nur 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;
}
244
Dominic

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]) .

113
Mike M. Lin

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ür process.stdout und process.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 Die process.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:

Fall 1 - Ausführung abgeschlossen (Kommandozeilen-Skript)

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.

Fall 2 - Beendigung wegen externem Signal (SIGINT/SIGTERM/Sonstiges)

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.

Fall 3 - Interner Fehler

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.

63
teq

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

23
Siva Prakash

Ich habe eine Bewerbung, die ich wollte:

  1. Senden Sie eine E-Mail an den Benutzer
  2. Beenden Sie mit einem Fehlercode

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); });
12
Stephen Quan

Drücken Sie zweimal Ctrl + C oder .exit.

> 
(To exit, press ^C again or type .exit)
> 
7
HeadAndTail

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 + CCtrl + C

Auf dem Mac lautet der Befehl Ctrl + ZCtrl + Z

7
zzzzBov

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");

7
MANN

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 
6
Denis Lisitskiy

Befehlszeile

Drücken Sie zweimal CTRL + C

OR

Geben Sie .exit ein und drücken Sie die Eingabetaste

Skriptdatei

process.exit(code)
3
Farhan Yaseen

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!

3
Alison Stuart

wenn Sie die Anwendung von Knoten js verlassen möchten, schreiben Sie

process.exit(1)

in Ihrem Code

0
Ajay Mudaliyar

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 ()

0
sumit_suthar

Ö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 
0
Shekar Mania

Das Verlassen des Knotens js erfolgt auf zwei Arten:

  • Aufruf von process.exit () explizit.
  • Oder wenn die Ereignisschleife von nodejs mit allen Tasks ausgeführt wird und nichts mehr zu tun ist. Dann wird die Knotenanwendung automatisch beendet.

Wie es funktioniert?

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.

0
majid jiji

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.

0