Вызовите метод глобального process
объекта exit
:
process.exit()
Из документов:
process.exit ([код])
Завершает процесс указанным code
. Если опущено, для выхода используется код успеха 0
.
Чтобы выйти с кодом «сбой»:
process.exit(1);
Оболочка, которая выполнила узел, должна видеть код выхода как 1
.
end()
запрос. В противном случае он просто зависнет.exit
не вводит в заблуждение вообще. Вы не знаете, как работает Node. Думайте об Узле как о самом сервере. Он не просто запускается по мере необходимости, как PHP внутри веб-сервера, как Apache. Node даже не имеет ничего общего с веб-серверами! Это просто хост для некоторого JavaScript, с некоторыми изящными встроенными библиотеками для выполнения полезных задач.mod_php
или использовать Apache. Вы можете переопределить httpd в PHP, как это делает узел, если вы действительно хотите, или использовать более вменяемый / стандартизированный подход, такой как FastCGI, так же, как вы можете в узле.process.exit()
это не рекомендуется , как описано в этом ответе ниже .Просто к сведению , что использование
process.exit([number])
является не рекомендуется практика.источник
process.exit()
для чего предназначен.Из официальной документации nodejs.org :
Завершает процесс указанным кодом. Если опущен, выход использует код «успеха» 0.
Чтобы выйти с кодом «сбой»:
источник
code = 0; process.exit(code);
code
?process.exit()
без параметров, так как код по умолчанию равен 0process.exit(0);
и запустите его,node exit_0.js && echo 'success'
он скажет «успех». Если вы создадите exit_1.js с помощьюprocess.exit(1);
и запустите,node exit_1.js && echo 'success'
он не скажет «успех», поскольку ваш процесс завершился с ненулевым значением (что указывает на «сбой» или «ненормальный выход» в оболочку). Кроме того, вы увидите различные значения,$?
если вы запуститеnode exit_1.js
vsnode exit_0.js
(вы можете проверить, выполнив,node exit_1.js
а затем выполнивecho $?
).Если вы находитесь в терминале Unix или в командной строке Windows и хотите выйти из узла REPL, либо ...
.exit
и нажмите Enter илиисточник
node
REPL Ctrl + D для выхода является стандартным поведением, поэтому он также работает в Windows.Из командной строки,
.exit
это то , что вы хотите:Это задокументировано в документах REPL . REPL (Read-Eval-Print-Loop) - это то, что называется командной строкой узла.
Из обычной программы используйте
process.exit([code])
.источник
Это зависит от причины, по которой вы готовы выйти из процесса node.js, но в любом случае
process.exit()
это последний вариант для рассмотрения . Цитата из документации:Давайте рассмотрим возможные причины, по которым вы можете выйти из процесса node.js, и почему вам следует избегать
process.exit()
:Случай 1 - Выполнение завершено (сценарий командной строки)
Если сценарий достиг своего конца и интерпретатор узла не завершил работу, это означает, что некоторые асинхронные операции все еще ожидают выполнения. На
process.exit()
данном этапе неправильно принудительно завершать процесс . Лучше попытаться понять, что удерживает ваш скрипт от ожидаемого выхода . И когда вы решите это, вы можете использоватьprocess.exitCode
для возврата любого результата в вызывающий процесс.Случай 2 - Завершение из-за внешнего сигнала (SIGINT / SIGTERM / другое)
Например, если вы хотите элегантно завершить работу экспресс- приложения. В отличие от сценария командной строки, приложение Express работает бесконечно, ожидая новых запросов.
process.exit()
будет плохим вариантом, потому что он будет прерывать все запросы, которые находятся в конвейере. И некоторые из них могут быть неидемпотентными (ОБНОВЛЕНИЕ, УДАЛЕНИЕ). Клиент никогда не узнает, выполнены ли эти запросы на стороне сервера или нет, и это может быть причиной несоответствия данных между клиентом и сервером. Единственным хорошим решением является указание http-серверу прекратить принимать новые запросы и ждать, пока ожидающие завершат работуserver.close()
:Если это все еще не выходит - см. Случай 1.
Случай 3 - Внутренняя ошибка
Всегда лучше с
throw
ошибкой, вы получите красиво отформатированную трассировку стека и сообщение об ошибке. Верхние уровни кода всегда могут решить, могут ли они обработать error (catch
) или позволить ему завершить процесс. С другой стороны,process.exit(1)
молча завершит процесс, и у него не будет возможности восстановиться после этого. Это может быть единственным «преимуществом»process.exit()
, вы можете быть уверены, что процесс будет прекращен.источник
Process.exit()
Похоже, что излишнее избыточное для большинства приложений. Я искал эквивалент функции php's die () ... больше похоже на:throw new Error('die msg')
REPL (командная строка)
Нажмите
ctrl + c
дваждыВведите
.exit
и нажмите вводФайл сценария
Узел обычно выходит с кодом 0 когда больше не ожидают асинхронные операции.
process.exit(1)
должен использоваться для выхода с кодом ошибки. Это позволит нам сделать вывод, что узел не закрылся изящно и был вынужден закрыться.Есть и другие коды выхода, такие как
3 - Внутренняя ошибка синтаксического анализа JavaScript (очень очень редко)
5 - фатальная ошибка в движке javascript v8
9 - неверный аргумент
Полный список см. В кодах выхода узла.
источник
У меня есть приложение, которое я хотел:
Мне пришлось подключиться
process.exit(code)
кexit
обработчику событий, иначе письмо не будет отправлено, поскольку вызовprocess.exit(code)
напрямую убивает асинхронные события.источник
process.exitCode
меня работать в инструменте командной строки, который я создаю (проверено на Node v4.3.0). Но я не мог заставить его вести себя так, как задокументировано. Это вполне могло бы быть крайним случаем сcommander
- хотя github.com/tj/commander.js/… заставляет меня задуматься. Не уверен, что кто-нибудь еще видел эту проблему с узлом 4, но документирование на всякий случай для дальнейшего использования.process.exitCode = 1
, процесс завершается с кодом 0.Как указал @Dominic, выбрасывать неперехваченную ошибку лучше, чем вызывать process.exit ([code]) :
process.exitCode = 1; throw new Error("my module xx condition failed");
источник
Выходить
Полезные коды выхода
источник
Из кода вы можете использовать
process.exit([errorcode])
где[errorcode]
необязательное целое число (0
по умолчанию указывает на успех).Если вы используете Read Eval Print Loop (REPL) , вы можете использовать Ctrl+ Dили набрать
.exit
Кроме того, в Windows или Linux вы можете использовать Ctrl+ C, Ctrl+C
На Mac команда Ctrl+ Z, Ctrl+Z
источник
node --version
v0.10.18
Нажмите
Ctrl + C
дважды или.exit
.источник
Я смог заставить все мои процессы узлов умереть непосредственно из оболочки Git Bash в Windows 10, набрав
taskkill -F -IM node.exe
- это завершает все процессы узлов на моем компьютере одновременно. Я нашел, что я мог также использоватьtaskkill //F //IM node.exe
. Не уверен, почему так-
и//
работает в этом контексте. Надеюсь это поможет!источник
Поскольку процесс является глобальным объектом, вам не нужно импортировать какой-либо модуль. Следующая функция завершает или убивает текущий процесс узла.
источник
Откройте терминал командной строки, где запущено приложение узла, и нажмите Ctrl + C
если вы хотите выйти из приложения js узла из кода,
источник
если вы хотите выйти из приложения js узла, напишите
в вашем коде
источник
Выход в узел js выполняется двумя способами:
Как это работает?
Если вы хотите заставить цикл выполнения остановить процесс, вы можете использовать глобальную переменную process, которая является экземпляром EventEmitter . Поэтому, когда вы вызываете process.exit (), вы фактически генерируете событие выхода, которое немедленно завершает все задачи, даже если асинхронные операции еще не выполнены.
process.exit () принимает код выхода (Integer) в качестве параметра. Код 0 является значением по умолчанию, и это означает, что он завершается с «успехом». В то время как код 1 означает, что он завершается с «неудачей».
источник
Если вы находитесь в Windows, перейдите в диспетчер задач, затем перейдите в раздел «Процессы», найдите процесс под названием «узел», затем щелкните по нему правой кнопкой мыши и выберите параметр «Завершить процесс».
источник
Вы можете использовать process.exit ([code]) функцию .
Если вы хотите выйти без «сбоя», используйте код
0
:Чтобы выйти с кодом «сбой»,
1
вы можете запустить:Код сбоя является специфическим для приложения. Таким образом, вы можете использовать свои собственные соглашения для этого.
источник