Вопрос: Как выйти из Node.js


Какова команда, которая используется для выхода? (то есть завершить процесс node.js)


1327


источник


Ответы:


Вызовите глобальную processобъекты exitметод:

process.exit()

Из документов:

process.exit ([код])

Завершает процесс с указанным code, Если опустить, exit использует код «success» 0,

Для выхода с кодом отказа:

process.exit(1);

Оболочка, выполняющая узел, должна видеть код выхода как 1.


1634



От официального nodejs.org документация:

process.exit(code)

Завершает процесс с указанным кодом. Если опустить, exit использует код «success» 0.

Для выхода с кодом отказа:

process.exit(1);

317



Если вы находитесь в терминале Unix или в командной строке Windows и хотите выйти из Node REPL, либо ...

  • Нажмите Ctrl + С дважды, или
  • тип .exitи нажмите Enter, или
  • Нажмите Ctrl + D в начале строки (только для Unix)

235



Просто обратите внимание, что использование process.exit([number])является не рекомендуется практика.

Причина, по которой это проблематично, заключается в том, что запись в process.stdout в   Node.js не блокируются и могут возникать при нескольких тиках   Цикл событий Node.js. Вызов process.exit (), однако, заставляет   процесс для выхода до того, как дополнительные записи на stdout могут быть   выполнено.

Вместо прямого вызова метода process.exit () код должен установить   process.exitCode и позволить процессу выйти естественным путем, избегая   планирование любой дополнительной работы для цикла событий:

Если вы можете установить код выхода и позволить узлу выйти изящно:

process.exitCode = 1;

164



Из командной строки, .exitэто то, что вы хотите:

$ node
> .exit
$

Это задокументировано в REPL docs , REPL (Read-Eval-Print-Loop) - это вызов командной строки узла.

Из обычной программы используйте process.exit([code]),


109



Это зависит от причины, по которой вы хотите выйти из процесса node.js, но в любом случае process.exit()это последний вариант рассмотрения , Цитата из документации:

Важно отметить, что вызов process.exit()заставит   чтобы выйти как можно быстрее, даже если есть еще   асинхронные операции, которые еще не завершены,   включая операции ввода-вывода для process.stdoutа также process.stderr,

В большинстве ситуаций на самом деле нет необходимости звонить process.exit()в явном виде. Процесс Node.js выйдет из собственного   если в цикле событий нет дополнительной работы. process.exitCodeсвойство может быть установлено, чтобы указать процесс, который выходит   код для использования, когда процесс выходит изящно.

Давайте рассмотрим возможные причины, по которым вы, возможно, захотите выйти из процесса node.js и почему вам следует избегать process.exit():

Случай 1 - Выполнение завершено (сценарий командной строки)

Если сценарий достиг своего конца, а интерпретатор узла не выходит, это указывает на то, что некоторые операции async все еще ожидаются. Неправильно принудительно завершить процесс с помощью process.exit()с этой точки зрения. Лучше попытаться понять что удерживает ваш сценарий от ожидаемого пути , И когда вы разрешите это, вы можете использовать process.exitCodeдля возврата любого результата в вызывающий процесс.

Случай 2 - Прекращение из-за внешнего сигнала (SIGINT / SIGTERM / другое)

Например, если вы готовы изящно закрыть экспресс приложение. В отличие от сценария командной строки, экспресс-приложение работает бесконечно, ожидая новых запросов. process.exit()будет плохой вариант здесь, потому что он прервет все запросы, которые находятся в конвейере. И некоторые из них могут быть не-идемпотентными (UPDATE, DELETE). Клиент никогда не узнает, завершены ли эти запросы или нет на стороне сервера, и это может быть причиной несогласованности данных между клиентом и сервером. Единственное хорошее решение - сообщить http-серверу о прекращении приема новых запросов и дождаться отсрочки завершения 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");
   });
});

Если он все еще не выходит - см. Случай 1.

Случай 3 - Внутренняя ошибка

Всегда лучше throwошибка, вы получите красиво отформатированную трассировку стека и сообщение об ошибке. Верхние уровни кода всегда могут решить, могут ли они обрабатывать ошибки ( catch) или разрешить этот процесс. На другой стороне, process.exit(1)прекратит процесс молча, и от этого не будет возможности восстановиться. Это может быть единственная «польза» process.exit(), вы можете быть уверены, что процесс будет прекращен.


52



REPL(Command Line)

  • Press ctrl + c twice

  • Type .exit and press enter

Script File

process.exit(code)

Node normally exits with code 0 when no more async operations are pending.

process.exit(1) should be used to exit with a failure code.This will allow us to infer that node didn't close gracefully and was forced to close.

There are other exit codes like

3 - Internal JavaScript Parse Error ( very very rare)

5 - Fatal error in v8 javascript engine

9 - Invalid argument

For full list see node exit codes


22



I have an application which I wanted to:

  1. Send an email to the user
  2. Exit with an error code

I had to hook process.exit(code) to an exit event handler, or else the mail will not be sent since calling process.exit(code) directly kills asynchronous events.

#!/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



From code you can use process.exit([errorcode]) where [errorcode] is an optional integer (0 is the default to indicate success).

If you're using the Read Eval Print Loop (REPL), you can use Ctrl + D, or type .exit

Alternatively, on Windows or Linux you can use Ctrl + C, Ctrl + C

On Mac the command is Ctrl + Z, Ctrl + Z


6



As @Dominic pointed out, throwing an uncaught error is better practice instead of calling process.exit([code]):
process.exitCode = 1; throw new Error("my module xx condition failed");


6