остановить все экземпляры сервера 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»
И команда будет taskkill/F/PID your pid
Ответ 16
Вы можете использовать следующую команду, чтобы быть точным в уничтожении локального сервера (здесь: 8000)
Это даст вам следующие группы TCP:
КОМАНДА PID ПОЛЬЗОВАТЕЛЬ FD ТИП РАЗМЕР УСТРОЙСТВА/ВЫКЛЮЧЕНО ИМЯ УЗЛА
узел 21521 Ubuntu 12U IPv6 345668 0t0 TCP *: 8000 (СЛУШАТЬ)