node js остановить выполнение скрипта

О завершении работы Node.js-процессов

Существует несколько способов намеренного завершения работы процесса. Среди них — следующие:

ОперацияПример
Ручной выход из процесса
Неперехваченная ошибка
Необработанное отклонение промиса
Проигнорированное событие error
Необработанный сигнал

Ручной выход из процесса

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

Теперь пользователю будут понятны причины остановки приложения. Пользователь запускает приложение, оно выдаёт ошибку в консоль, после чего пользователь принимает меры для исправления ситуации.

Стоит отметить, что метод process.exit() — это весьма мощный механизм. Хотя у него есть своё место в коде приложений, его категорически не рекомендуется использовать в библиотеках, рассчитанных на многократное использование. Если ошибка произошла в библиотеке, библиотека должна её выбросить. Это позволит приложению, использующему библиотеку, самостоятельно принять решение о том, как обрабатывать эту ошибку.

Исключения, отклонения промисов, выдача событий error

Экземпляры класса Error содержат метаданные, которые полезны в деле определения причины ошибки. Например — данные трассировки стека и строки с сообщениями об ошибке. Распространённой является практика построения на основе класса Error классов ошибок, рассчитанных на конкретное приложение. При этом одно лишь создание экземпляра класса Error не приводит к каким-то заметным последствиям. Экземпляр ошибки нужно не только создать, но и выбросить.

А вот пример того, что при выполнении подобного кода выводится в консоли:

Отклонённые промисы, в отличие от неперехваченных исключений, не приводят, в Node.js v14, к остановке процесса. В будущих версиях Node.js отклонённые промисы будут завершать работу процессов. Подобные события, как и в случае с событиями ошибок, можно перехватывать с помощью объекта process :

Сигналы

В разных операционных системах могут быть определены различные сигналы. Ниже приведён список сигналов, которые, по большей части, универсальны.

ИмяКодПодлежит ли сигнал обработкеСтандартная реакция Node.jsЦель сигнала
1ДаЗавершение работыЗакрытие терминала
2ДаЗавершение работыСигнал прерывания (Ctrl+C) с терминала
3ДаЗавершение работыСигнал Quit с терминала (Ctrl+D)
9НетЗавершение работыБезусловное завершение процесса
10ДаЗапуск отладчикаПользовательский сигнал №1
12ДаЗавершение работыПользовательский сигнал №2
15ДаЗавершение работыЗапрос на завершение работы процесса
19НетЗавершение работыОстановка выполнения процесса

Если в программе может быть реализован механизм обработки соответствующего сигнала — в столбце таблицы «Подлежит ли сигнал обработке» стоит «Да». Два сигнала из таблицы с «Нет» в этой колонке обработке не подлежат. В столбце «Стандартная реакция Node.js» описана стандартная реакция Node.js-программы на получение соответствующего сигнала. В столбце «Цель сигнала» приведено описание стандартного общепринятого подхода к использованию сигналов.

Для обработки этих сигналов в Node.js-приложении можно воспользоваться уже знакомым нам механизмом объекта process по прослушиванию событий:

Возможно, вы уже догадались о том, что Node.js-программы могут отправлять сообщения другим программам. Выполните следующую команду, которая демонстрирует отправку сообщения от короткоживущего процесса работающему процессу:

В ответ на эту команду наш процесс покажет то же SIGHUP-сообщение, что показывал ранее. А если же работу этого процесса нужно завершить, ему надо отправить необрабатываемый сигнал SIGKILL :

После этого работа программы должна завершиться.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *