16 ответов:
от чиновника 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 - недопустимый аргумент
полный список см. коды выхода узла
у меня есть приложение, которое я хотел:
- отправить письмо
- выход с кодом ошибки
Я должен был зацепить
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. Не знаю, почему так-и//работать в этом контексте. Надеюсь, это поможет!
Comments