Как остановить node js сервер
Перейти к содержимому

Как остановить node js сервер

остановить все экземпляры сервера node.js

Я впервые работаю с Node.js и столкнулся с такой проблемой:

Я запустил сервер Node через плагин IDE. К сожалению, я не могу использовать терминал IDE. Поэтому я попытался запустить сценарий из командной строки.

Это проблема — я использую модуль Express, и мое приложение прослушивает какой-то порт (8080). Когда я запускаю приложение из командной строки, оно выдает следующую ошибку:

Хотя я не совсем уверен, что это за ошибка, я предположил, что это потому, что приложение прослушивает порт, который уже используется. Так я и сделал:

Это потому, что сервер Node уже запущен, когда я пытался запустить его из IDE.

Итак, я хочу знать, как я могу остановить все экземпляры сервера? Также, если вы можете сказать мне, как определить, что работает на порту, и убить его.

Машина Windows:

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

И если процессы все еще сохраняются, вы можете принудительно завершить процессы, добавив /f флаг:

Если вам нужен более детальный контроль и нужно только убить сервер, работающий на определенном порту, вы можете использовать его netstat для поиска идентификатора процесса, а затем отправить ему сигнал уничтожения. Итак, в вашем случае, где находится порт 8080 , вы можете запустить следующее:

Пятый столбец вывода — это идентификатор процесса:

Затем вы можете убить процесс с помощью taskkill /pid 14828 . Если процесс отказывается завершиться, просто добавьте в команду параметр /f (force).

Машина MacOS:

Процесс практически идентичен. Вы можете убить все процессы Node, запущенные на машине:

Или же , как упоминалась в @ ответ JACOB-грунтовых вод в ниже с помощью lsof , вы можете определить идентификатор слушающего процесса на порту (передать -i флаг и порт значительно ускорить этот процесс):

Идентификатор процесса в этом случае — это номер под столбцом PID, который вы затем можете передать kill команде:

Если процесс отказывается выйти, просто используйте -9 флаг, который не SIGTERM может быть проигнорирован:

Машина Linux:

Опять же, процесс почти идентичен. Вы можете убить все процессы Node, запущенные на машине (используйте, -$SIGNAL если SIGKILL недостаточно):

Или также используя netstat , вы можете найти PID процесса, прослушивающего порт:

Идентификатор процесса в этом случае — это число перед именем процесса в шестом столбце, которое вы затем можете передать kill команде:

Если процесс отказывается выйти, просто используйте -9 флаг, который не SIGTERM может быть проигнорирован:

Как выйти из программы Node.js

Узнайте, как наилучшим образом завершить работу приложения Node.js

Есть несколько способов закрыть приложение Node.js.

При запуске программы в консоли вы можете закрыть ее с помощью ctrl-C , но я хочу здесь обсудить программный выход.

Начнем с самого радикального и посмотрим, почему тебе лучше.нетиспользуй это.

В process Модуль core предоставляет удобный метод, позволяющий программно выйти из программы Node.js: process.exit() .

Когда Node.js запускает эту строку, процесс немедленно завершается.

Это означает, что любой ожидающий обратный вызов, любой сетевой запрос, который все еще отправляется, любой доступ к файловой системе или процессы, записывающие в stdout или же stderr — все будет немедленно прекращено некрасиво.

Если вас это устраивает, вы можете передать целое число, которое сигнализирует операционной системе код выхода:

По умолчанию код выхода 0 , что означает успех. Различные коды выхода имеют разное значение, которое вы, возможно, захотите использовать в своей собственной системе, чтобы программа могла взаимодействовать с другими программами.

Вы также можете установить process.exitCode свойство:

и когда программа позже завершится, Node вернет этот код выхода.

Программа корректно завершится после завершения всей обработки.

Много раз с помощью Node мы запускаем серверы, такие как этот HTTP-сервер:

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

В этом случае вам нужно отправить команде сигнал SIGTERM и обработать его с помощью обработчика сигнала процесса:

Примечание: process не требует «требовать», он доступен автоматически.

Что такое сигналы? Сигналы — это система взаимодействия POSIX: уведомление, отправляемое процессу, чтобы уведомить его о произошедшем событии.

SIGKILL это сигналы, которые говорят о немедленном завершении процесса и в идеале будут действовать как process.exit() .

SIGTERM это сигналы, которые приказывают процессу корректно завершить работу. Это сигнал, который отправляют такие менеджеры процессов, как upstart или же supervisord и много других.

Остановить node.js программу из командной строки

У меня есть простой TCP-сервер, который прослушивает порт.

Я начинаю его с node server.js , а затем закрываю его с помощью Ctrl + Z на Mac. Когда я пытаюсь запустить его снова с помощью node server.js , я получаю следующее сообщение об ошибке:

Я закрываю программу неправильно? Как я могу предотвратить это?

ОТВЕТЫ

Ответ 1

Чтобы завершить программу, вы должны использовать Ctrl + C . Если вы это сделаете, он отправит SIGINT , что позволяет программе законно изящество, отвязавшись от любых портов, которые он прослушивает.

Ответ 2

Ctrl + Z приостанавливает его, что означает, что он все еще может работать.

Ctrl + C фактически убьет его.

вы также можете убить его так:

Найдите идентификатор процесса (второй слева):

Это также может работать

Ответ 3

Или, альтернативно, вы можете сделать все это в одной строке:

Вы можете заменить node внутри ‘\ snode\s’ на любое другое имя процесса.

Ответ 4

вы можете ввести .exit , чтобы выйти из node js REPL

Ответ 5

Если вы выполняете Node.js в интерактивном режиме (REPL):

Ctrl + C вернет вас в > приглашение, затем введите:

или просто используйте Ctrl + D .

Ответ 6

$ sudo killall node в другом терминале работает с mac, а killall node не работает:

Ответ 7

Возобновить и убить процесс:

Скорее всего, вы сейчас в командной строке.

Дайте команде fg возобновить процесс на переднем плане.

введите Ctrl + C , чтобы правильно его убить.

Альтернативно вы можете убить его вручную следующим образом:

( ПРИМЕЧАНИЕ: для следующих команд может потребоваться root, поэтому sudo . — ваш друг)

или, если у вас нет pkill, это может сработать:

или, возможно, это:

иногда процесс перечисляет свой собственный grep, и в этом случае вам понадобится:

h/t @ruffin из комментариев по самому вопросу. У меня была такая же проблема, и его комментарий помог мне решить ее сам.

Ответ 8

на Linux попробуйте: pkill node

Ответ 9

Хотя это поздний ответ, я нашел это из Документы NodeJS:

Событие «выход» выдается, когда REPL завершается либо получением команды .exit в качестве входного сигнала, либо нажатием кнопки <ctrl>-C дважды для сигнала SIGINT, либо нажатием <ctrl>-D на сигнал «конец» на входной поток. Обратный вызов слушателя вызывается без каких-либо аргументов.

Итак, чтобы подвести итог, вы можете выйти:

  • Ввод .exit в nodejs REPL.
  • Дважды нажмите <ctrl>-C .
  • нажатие <ctrl>-D .
  • process.exit(0) означает естественный выход из REPL. Если вы хотите вернуть какой-либо другой статус, вы можете вернуть ненулевой номер.
  • process.kill(process.pid) — это способ убить using nodejs api из вашего кода или из REPL.
Ответ 10

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

Чистым способом управления процессами сервера Node является использование пакета forever (от NPM ).

Пример:

Установить Forever

npm install forever -g

Запустить Node Сервер

forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js

Результат:

info: Forever processing file: server.js

Выключение Node Сервер

forever stop server.js

Результат

info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj «/usr/bin/nodejs/node»

/path/to/your/project/server.js 23084 13176

Это приведет к чистому отключению вашего приложения Server.

Ответ 11

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

Ответ 12

У меня возникла проблема, когда у меня работает несколько node серверов, и я хочу просто убить одну из них и переустановить ее из script.

Примечание. Этот пример находится в оболочке bash на Mac.

Чтобы сделать это, я обязательно сделаю мой вызов node максимально конкретным. Например, вместо вызова node server.js из каталога приложений я вызываю node app_name_1/app/server.js

Затем я могу убить его, используя:

kill -9 $(ps aux | grep ‘node\ app_name_1/app/server.js’ | awk ‘‘)

Это приведет только к уничтожению процесса node с запуском app_name_1/app/server.js.

Если вы запустили node app_name_2/app/server.js , этот процесс node будет продолжать работать.

Если вы решите, что хотите убить их, вы можете использовать killall node , как упомянули другие.

Ответ 13

Поздний ответ, но в Windows, открытие диспетчера задач с помощью CTRL + ALT + DEL, а затем уничтожение процессов Node.js решит эту ошибку.

Ответ 14

Мой пример использования: на MacOS запускать/перезапускать серверы нескольких узлов на разных портах из скрипта

выполнить: «cd $PATH1 && node server1.js & cd $PATH2 && node server2.js &. «

stop1: «kill -9 $(lsof -nP -i4TCP:$PORT1 | grep LISTEN | awk ‘‘)»

перезапустить: «stop1 & stop2 &. & stopN; run

для получения дополнительной информации о поиске процесса по порту: кто прослушивает данный порт TCP в Mac OS X?

Ответ 15

Для Windows сначала найдите PID с вашим номером порта

После этого убейте задачу, убедитесь, что вы находитесь в корневом каталоге вашего диска «c» enter image description here И команда будет taskkill/F/PID your pid

Ответ 16

Вы можете использовать следующую команду, чтобы быть точным в уничтожении локального сервера (здесь: 8000)

Это даст вам следующие группы TCP:

КОМАНДА PID ПОЛЬЗОВАТЕЛЬ FD ТИП РАЗМЕР УСТРОЙСТВА/ВЫКЛЮЧЕНО ИМЯ УЗЛА

узел 21521 Ubuntu 12U IPv6 345668 0t0 TCP *: 8000 (СЛУШАТЬ)

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

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