Как выйти из Node.js

В этом руководстве мы покажем вам различные способы выхода из программ Node.js. Сначала вам нужно понять, что Node.js работает в одном потоке или в основном процессе. Вы можете порождать дополнительные дочерние процессы для выполнения дополнительной работы. Выход из основного процесса позволяет нам выйти из Node. Хотя есть много способов выйти из Node, некоторые способы лучше, чем другие для определенных ситуаций, например, если вы используете REPL или нет. Мы объясним это более подробно в статье. Разрешение сценарию Exi

В этом руководстве мы покажем вам различные способы выхода из программ Node.js. Сначала вам нужно понять, что Node.js работает в одном потоке или в основном процессе. Вы можете порождать дополнительные дочерние процессы для выполнения дополнительной работы. Выход из основного процесса позволяет нам выйти из Node.

Хотя есть много способов выйти из Node, некоторые способы лучше, чем другие для определенных ситуаций, например, если вы используете REPL или нет. Мы объясним это более подробно в статье.

Неявный выход из сценария

Для выхода из программы Node.js, запущенной из командной строки, достаточно просто дождаться завершения выполнения сценария. Неявно процесс Node.js завершится, когда достигнет конца скрипта.

В этом можно убедиться, запустив следующий скрипт:

 // batman.js 
 console.log('Batman begins'); 
 
 process.on('exit', function(code) { 
 return console.log(`About to exit with code ${code}`); 
 }); 

Запустите программу с командным node batman.js , и вы увидите, что она выводит первое утверждение о Бэтмене. Кроме того, срабатывает обратный вызов «exit», в результате чего выводится сообщение о выходе и код выхода. Вы должны увидеть что-то похожее на следующее:

 $ node batman.js 
 Batman begins 
 About to exit with code 0 

Обратите внимание, что ожидающие события и циклы блокируют выход из программы. Добавьте эту повторяющуюся функцию в конец приведенного выше скрипта.

 // batman.js 
 
 // ... 
 
 setInterval((function() { 
 return console.log('I\'m Batman!'); 
 }), 1000); 

Запустите его снова. На этот раз программа не завершается, потому что повторяющаяся setInterval блокирует выход из Node.js. Ваш результат будет выглядеть примерно так:

 $ node batman.js 
 Batman begins 
 I'm Batman! 
 I'm Batman! 
 I'm Batman! 
 ... 

Где "Я Бэтмен!" фраза непрерывно печатается, пока вы не выйдете принудительно, например, с помощью Ctrl + C , или не закроете терминал.

Использование process.exit ()

Мы можем выйти из программ Node.js, используя явный вызов функции process.exit Функция process.exit завершает текущий процесс Node.js. Требуется код выхода, который является целым числом.

Объект process - это глобальная переменная, которая позволяет нам управлять текущим процессом Node.js. Поскольку он глобальный, мы можем получить к нему доступ из любого места внутри программы Node.js, не используя require для его импорта.

Давайте обновим последнюю программу, которая не завершилась из-за функции setInterval На этот раз мы заставим его выйти, используя timeout истечении 5 секунд. Добавьте следующую функцию к тому же сценарию batman.js, который использовался ранее.

 // batman.js 
 
 // ... 
 
 setTimeout((function() { 
 return process.exit(22); 
 }), 5000); 

Когда вы запустите node batman.js , вы заметите, что на этот раз программа работает в течение ограниченного времени, а затем завершается с кодом выхода 22.

 node batman.js 
 Batman begins 
 I'm Batman! 
 I'm Batman! 
 I'm Batman! 
 I'm Batman! 
 About to exit with code 22 

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

Node.js интерпретирует ненулевые коды как сбой, а код выхода 0 как успех.

Выход из Node.js с помощью process.kill ()

Мы также можем выйти из Node.js, используя process.kill чтобы убить запущенный процесс Node.js. Разница между this и process.exit заключается в том, что process.kill принимает pid или идентификатор процесса процесса, который мы хотим убить, а также необязательный сигнал, который мы хотим отправить процессу. Это означает, что мы можем отправлять сигналы для уничтожения процессов, отличных от основного процесса Node.js. Это полезно в приложениях с высокой степенью параллелизма и множеством запущенных процессов.

Чтобы убить основной процесс Node, мы просто передаем pid основного процесса.

Чтобы увидеть это в действии, замените setTimeout в нашем предыдущем примере кода этой версией, в которой используется process.kill .

 // batman.js 
 
 // ... 
 
 setTimeout((function() { 
 return process.kill(process.pid); 
 }), 5000); 

Программа завершает работу по расписанию, как и раньше, после того, как будут напечатаны некоторые из тех же операторов. На этот раз pid также выводится на консоль (ваш может отличаться от 15):

 $ node batman.js 
 Batman begins 
 I'm Batman! 
 I'm Batman! 
 I'm Batman! 
 I'm Batman! 
 Terminated: 15 

Этот метод также работает в REPL, а также в программах на Node.js.

Как выйти из Node.js с помощью process.abort

Точно так же мы можем использовать process.abort для выхода из Node.js. Этот метод работает в REPL, а также в скриптах и приложениях.

Разница между process.abort , process.kill и process.exit заключается в том, что process.abort всегда немедленно выходит из Node.js и генерирует файл ядра. Кроме того, обратные вызовы событий запускаться не будут.

Примечание : только что упомянутый файл ядра не создается, если ulimit -c имеет значение 0 . См. Этот учебник для получения более подробной информации.

Чтобы увидеть это в действии, замените process.kill в нашем batman.js на вызов process.abort и запустите node batman.js .

 // batman.js 
 
 // ... 
 
 setTimeout((function() { 
 return process.abort(); 
 }), 5000); 

Когда вы запускаете программу с помощью node batman.js , программа выводит строки, как и раньше, но завершает работу по истечении времени ожидания, распечатывая некоторую информацию о состоянии программы после ее прерывания.

 $ node batman.js 
 Batman begins 
 I'm Batman! 
 I'm Batman! 
 I'm Batman! 
 I'm Batman! 
 Abort trap: 6 

REPL

Поскольку REPL (цикл чтения-оценки-печати) представляет собой среду выполнения, отличную от вашего типичного сценария Node.js, эти стратегии выхода заслуживают отдельных специальных разделов. Это связано с тем, что REPL является интерактивной средой и не просто неявно завершает работу, как сценарий.

Как мы уже упоминали в некоторых из предыдущих разделов, некоторые из вышеперечисленных стратегий также будут работать в REPL. Однако их использование в этом случае не является типичным, и вместо этого вам следует использовать следующие методы.

Выход с помощью комбинации клавиш

В отличие от vim, выйти из REPL очень просто. В запущенном REPL вы можете выйти из него, используя комбинацию Ctrl + C и нажав дважды. Это отправляет SIGINT или сигнал прерывания в REPL. Обычно это используется для выхода из программ в системах POSIX.

Использование команды .exit

Мы также можем выйти из Node.js REPL с помощью команды ".exit". Когда вы вводите это в работающем узле REPL, текущий REPL выйдет. Этот вызов работает аналогично описанному выше методу Ctrl + C

Заключение

Во многих случаях для выхода из Node.js. достаточно process.exit Однако, как мы видели, существует множество альтернатив. Различные методы дают вам гибкость для выхода из любого конкретного места в вашем коде. Однако вы должны быть осторожны с этой дополнительной мощностью, чтобы не вставлять опасный код, который может привести к незапланированным выходам и сбою ваших программ.

comments powered by Disqus