Как выйти в узел.js



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

501   16  

16 ответов:

вызов глобальной process объекта exit способ:

process.exit()

документы:

от чиновника nodejs.org документация:

process.exit(code)

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

для выхода с кодом' failure':

process.exit(1);

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

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

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

причина, по которой это проблематично, заключается в том, что пишет в процесс.stdout in Узел.JS не является неблокируемой и может произойти в течение нескольких клещей Узел.цикл событий js. Вызывающий процесс.выход(), однако, заставляет процесс выхода перед тем, как эти дополнительные записи в stdout могут быть выполненный.

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

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

process.exitCode = 1;

из командной строки .exit что требуется:

$ node
> .exit
$

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

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

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

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

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

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

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

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

Пример 2 - прекращение из-за внешнего сигнала (SIGINT / SIGTERM / other)

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

REPL(Командная Строка)

  • пресс ctrl + cдва раза

  • тип .exit и нажмите enter

Файл Скрипта

process.exit(code)

узел обычно выходит с код 0 когда больше не ожидается асинхронных операций.

process.exit(1) должен использоваться для выхода с кодом сбоя.Это позволит нам сделать вывод, что узел не закрылся изящно и был вынужден закрыться.

есть и другие коды выхода, как

3-Внутренняя ошибка синтаксического анализа JavaScript (очень редко)

5-фатальная ошибка в движке javascript v8

9 - недопустимый аргумент

полный список см. коды выхода узла

у меня есть приложение, которое я хотел:

  1. отправить письмо
  2. выход с кодом ошибки

Я должен был зацепить process.exit(code) до exit обработчик событий, иначе почта не будет отправлена с момента вызова process.exit(code) непосредственно убивает асинхронные события.

#!/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); });

из кода, Вы можете использовать process.exit([errorcode]) здесь [errorcode] необязательное целое число (0 по умолчанию указывает на успех).

если вы используете Read Eval Print Loop (REPL), вы можете использовать Ctrl + D, или типа .exit

кроме того, на Windows или Linux вы можете использовать Ctrl + C,Ctrl + C

на Mac команда Ctrl + Z,Ctrl + Z

на выходе

let exitCode = 1;
process.exit(exitCode)

полезные коды выхода

1 - Catchall for general errors
2 - Misuse of shell builtins (according to Bash documentation)
126 - Command invoked cannot execute
127 - “command not found”
128 - Invalid argument to exit
128+n - Fatal error signal “n”
130 - Script terminated by Control-C
255\* - Exit status out of range

Как указал @ Dominic, выбрасывание неперехваченной ошибки лучше практика вместо вызова

Командная Строка

пресс CTRL + C два раза

или

тип .exit и нажмите enter

Файл Скрипта

process.exit(code)

я смог заставить все мои процессы узла умереть непосредственно из оболочки Git Bash в Windows 10, введя taskkill -F -IM node.exe - Это завершает все процессы узла на моем компьютере сразу. Я обнаружил, что могу также использовать taskkill //F //IM node.exe. Не знаю, почему так - и // работать в этом контексте. Надеюсь, это поможет!

пресс Ctrl + C в два раза или .exit.

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

Если вы хотите выйти из приложения node js, то напишите

process.exit(1)

код

вы можете использовать

Comments

    Ничего не найдено.