Frage Wie man in Node.js beendet


Welcher Befehl wird zum Beenden verwendet? (d. h. beende den Prozess node.js)


1359
2018-03-10 21:30


Ursprung


Antworten:


Ruf das Globale an process Objekt ist exit Methode:

process.exit()

Aus den Dokumenten:

process.exit ([Code])

Beendet den Prozess mit dem angegebenen code. Wenn nicht angegeben, verwendet exit den Erfolgscode 0.

Um mit einem Fehlercode zu beenden:

process.exit(1);

Die Shell, die den Knoten ausgeführt hat, sollte den Beendigungscode als 1 sehen.


1693
2018-03-10 21:36



Vom Beamten nodejs.org Dokumentation:

process.exit(code)

Beendet den Prozess mit dem angegebenen Code. Wenn dies nicht angegeben wird, verwendet exit den Erfolgscode 0.

Um mit einem Fehlercode zu beenden:

process.exit(1);

320
2018-03-22 18:48



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

  • Drücken Sie Strg + C zweimal oder
  • Art .exit und drücken Sie die Eingabetaste oder
  • Drücken Sie Strg + D am Anfang einer Zeile (nur Unix)

236
2018-06-02 13:02



Nur eine Anmerkung, dass mit process.exit([number]) ist nicht empfohlen trainieren.

Der Grund dafür ist, dass in process.stdout geschrieben wird   Node.js blockieren nicht und können über mehrere Ticks des   Node.js Ereignisschleife. Der Aufruf von process.exit () erzwingt jedoch das   Prozess, um zu beenden, bevor diese zusätzlichen Schreibvorgänge in stdout sein können   durchgeführt.

Anstatt process.exit () direkt aufzurufen, sollte der Code den Wert   process.exitCode und erlauben Sie dem Prozess, natürlich zu beenden, indem Sie vermeiden   Planen von zusätzlichen Arbeiten für die Ereignisschleife:

Wenn Sie können, sollten Sie den Beendigungscode festlegen und zulassen, dass Knoten ordnungsgemäß beendet wird:

process.exitCode = 1;

175
2017-07-06 05:52



Über die Befehlszeile .exit ist was du willst:

$ node
> .exit
$

Es ist in der dokumentiert REPL-Dokumente. REPL (Read-Eval-Print-Loop) ist der Name der Node-Befehlszeile.

Von einem normalen Programm Gebrauch process.exit([code]).


109
2017-10-29 16:51



Es hängt davon ab, warum Sie den Prozess node.js beenden möchten, aber auf jeden Fall process.exit() ist der letzte Option zu berücksichtigen. Ein Zitat aus der Dokumentation:

Es ist wichtig, diesen Anruf zu beachten process.exit() wird die zwingen   Prozess so schnell wie möglich zu beenden, auch wenn es noch gibt   asynchrone Vorgänge, die noch nicht vollständig abgeschlossen sind,   einschließlich E / A-Operationen zu process.stdout und process.stderr.

In den meisten Situationen ist es nicht wirklich notwendig, anzurufen    process.exit() ausdrücklich. Der Node.js-Prozess wird eigenständig beendet   wenn in der Ereignisschleife keine weitere Arbeit ansteht. Das    process.exitCode Eigenschaft kann eingestellt werden, um dem Prozess zu sagen, welcher Ausgang   Code, der verwendet wird, wenn der Prozess ordnungsgemäß beendet wird.

Lassen Sie uns mögliche Gründe behandeln, warum Sie bereit sein könnten, den Prozess node.js zu beenden und warum Sie dies vermeiden sollten process.exit():

Fall 1 - Ausführung abgeschlossen (Befehlszeilenskript)

Wenn das Skript sein Ende erreicht hat und der Knoten-Interpreter nicht beendet wird, weist dies darauf hin, dass einige asynchrone Vorgänge noch ausstehen. Es ist falsch, die Beendigung des Prozesses mit zu erzwingen process.exit() An diesem Punkt. Es ist besser zu versuchen, es zu verstehen Was hält dein Skript davon ab, in erwarteter Weise zu beenden?. Und wenn Sie das regeln, können Sie verwenden process.exitCodeum irgendein Ergebnis zum aufrufenden Prozess zurückzugeben.

Fall 2 - Terminierung wegen externem Signal (SIGINT / SIGTERM / other)

Zum Beispiel, wenn Sie bereit sind, ein ausdrücken App Anders als beim Befehlszeilenskript läuft die Express-App unendlich weiter und wartet auf neue Anfragen. process.exit() wird hier eine schlechte Wahl sein, weil es alle Anfragen unterbricht, die in der Pipeline sind. Und einige von ihnen könnten nicht-idempotent sein (UPDATE, DELETE). Der Client wird niemals wissen, ob diese Anforderungen auf der Serverseite erfüllt sind oder nicht, und dies könnte der Grund für Dateninkonsistenz zwischen Client und Server sein. Die einzige gute Lösung besteht darin, dem HTTP-Server mitzuteilen, dass er keine neuen Anfragen mehr annehmen darf und auf die ausstehenden Anfragen warten soll 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");
   });
});

Wenn es immer noch nicht austritt - siehe Fall 1.

Fall 3 - Interner Fehler

Es ist immer besser throw ein Fehler, erhalten Sie eine schön formatierte Stack-Trace und Fehlermeldung. Obere Codeebenen können immer entscheiden, ob sie mit Fehlern umgehen können (catch) oder lass es den Prozess zum Absturz bringen. Auf der anderen Seite, process.exit(1) beendet den Prozess still und es gibt keine Chance, sich davon zu erholen. Es könnte der einzige "Vorteil" von sein process.exit()Sie können sicher sein, dass der Prozess beendet wird.


55
2018-02-06 17:38



ERSETZEN(Befehlszeile)

  • Drücken Sie ctrl + c  zweimal

  • Art .exit und drücke Enter

Skriptdatei

process.exit(code)

Der Knoten wird normalerweise mit beendet Code 0 wenn keine asynchronen Operationen mehr ausstehen.

process.exit(1) sollte verwendet werden, um mit einem Fehlercode zu beenden. 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 JavaScript Engine v8

9 - Ungültiges Argument

Für die vollständige Liste sehen Sie Knoten-Exit-Codes


22
2018-02-09 05:36



Ich habe eine Bewerbung, die ich wollte:

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

Ich musste haken process.exit(code) zu einem exit Ereignishandler, oder die Mail wird seit dem Aufruf nicht gesendet process.exit(code) tötet asynchrone Ereignisse direkt ab.

#!/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
2017-12-06 01:15