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


186

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

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

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

events.js:71
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: listen EADDRINUSE
    at errnoException (net.js:770:11)
    at HTTPServer.Server._listen2 (net.js:910:14)
    at listen (net.js:937:10)
    at HTTPServer.Server.listen (net.js:986:5)
    at Object.<anonymous> (C:\xampp\htdocs\node\chat\app.js:5:5)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)

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

netstat -an

я могу видеть

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

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

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


1
Извините, я не упомянул, что нахожусь в среде Windows. Пожалуйста, отправьте команды, которые имеют отношение. Спасибо
Киран Амбати

а также вы можете найти задачу node.js в вашем диспетчере задач Windows. найдите прогресс с именем Node.js: на стороне сервера ... и откройте его подробную информацию, вы найдете pid и подробную информацию о прогрессе вашего nodejs
Xiuying Lan,

Это тот, который работал для меня: superuser.com/questions/1183057/…
неизвестно

Ответы:


422

Windows Machine:

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

taskkill /im node.exe

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

taskkill /f /im node.exe

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

C:\>netstat -ano | find "LISTENING" | find "8080"

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

  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       14828
  TCP    [::]:8080              [::]:0                 LISTENING       14828

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


Linux-машина:

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

killall node

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

$ netstat -nlp | grep :8080
tcp        0      0 0.0.0.0:8080         0.0.0.0:*                   LISTEN      1073/node

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

$ kill 1073

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

$ kill -9 1073

1
извините, как именно я могу использовать эти команды? process.exit () может быть в коде? но сервер уже запущен. Вполне вероятно, что он запускается с командного узла app.js, но не с node-dev app.js. И «узел killall» не работает. Я делаю это неправильно? Спасибо
Киран Амбати

1
process.exit()в вашем приложении вызывает закрытие экземпляра NodeJS. killall nodeВ bash будут убиты все экземпляры NodeJS, работающие на вашем компьютере.
гексацианид

спасибо @hexacyanide. Я развиваю на окнах. Делает ли это, что killall node является недопустимой командой, потому что я не могу использовать ее из командной строки.
Киран Амбати

3
Попробуй taskkill /IM node.exe. Это убьет все названные процессы node.exe.
гексацианид

1
Мне пришлось использовать taskkill / F / IM node.exe, чтобы заставить его работать, спасибо!
Луис

75

Самый быстрый способ

killall node

Работает с Linux, OS X


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

не работает для меня. node: no process foundКроме того, когда я выполняю поиск процессов узла, которые выполняются на определенном порте, идентификатор процесса имеет -вместо самого номера.
Георгий Гвимрадзе

49

Вы можете использовать lsofполучить процесс, который привязан к требуемому порту.

К сожалению, флаги кажутся разными в зависимости от системы, но в Mac OS X вы можете запустить

lsof -Pi | grep LISTEN

Например, на моей машине я получаю что-то вроде:

mongod     8662 jacob    6u  IPv4 0x17ceae4e0970fbe9      0t0  TCP localhost:27017 (LISTEN)
mongod     8662 jacob    7u  IPv4 0x17ceae4e0f9c24b1      0t0  TCP localhost:28017 (LISTEN)
memcached  8680 jacob   17u  IPv4 0x17ceae4e0971f7d1      0t0  TCP *:11211 (LISTEN)
memcached  8680 jacob   18u  IPv6 0x17ceae4e0bdf6479      0t0  TCP *:11211 (LISTEN)
mysqld     9394 jacob   10u  IPv4 0x17ceae4e080c4001      0t0  TCP *:3306 (LISTEN)
redis-ser 75429 jacob    4u  IPv4 0x17ceae4e1ba8ea59      0t0  TCP localhost:6379 (LISTEN)

Второе число - это PID, а порт, который они слушают, находится справа перед "(СЛУШАТЬ)". Найти мошеннический PID и kill -9 $PIDзавершить с предубеждением.


Привет Джейкоб, пожалуйста, вы можете отредактировать ответ и добавить версию для Windows, потому что я занимаюсь разработкой для Windows. Спасибо
Киран Амбати

Я не знаю, как это сделать на Windows, извините Киран.
Джейкоб Подземные воды

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

25

Терминал Windows & GitBash Мне нужно было использовать эту команду в терминале Windows / Webstorm / GitBash

cmd "/C TASKKILL /IM node.exe /F"

3
Этот сделал это для меня. Спасибо
Адам Виктор

1
Этот сделал это и для меня. Я нашел самый быстрый способ уничтожить все процессы узлов в Windows.
Асад

17

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

ps aux | grep node

чтобы получить список всех идентификаторов процессов узла. Теперь вы можете получить свой идентификатор процесса (pid), затем выполните:

kill -9 PID

и если вы хотите уничтожить все процессы узла, выполните:

killall -9 node

-9 переключатель как конечная задача на окнах. это заставит процесс закончиться. ты можешь сделать:

kill -l

чтобы увидеть все переключатели команды kill и их комментарии.


8

Вы можете попробовать это:

taskkill /IM node.exe -F

7

Linux

Чтобы произвести впечатление на своих друзей

ps aux | grep -i node | awk '{print $2}' | xargs  kill -9

Но это тот, который вы будете помнить

killall node


2

Если вы используете Windows, выполните следующие действия:

  1. Откройте диспетчер задач, ищите этот процесс: Диспетчер задач, показывающий процесс Node - Node.js JavaScript на стороне сервера

  2. Затем просто щелкните правой кнопкой мыши и «Завершить задачу».

  3. Теперь все команды npm запускаются с самого начала.


1

Мультиплатформенное, стабильное, лучшее решение:

используйте fkill, чтобы убить процесс, который принимает ваш порт:

fkill -f :8080

Для установки fkill используйте команду: npm i -g fkill


1

можешь попробовать

killall node

Вы также можете попробовать

killall nodejs

Эти команды уже публиковались несколько раз. Это нормально, чтобы публиковать их снова, но тогда вы должны, по крайней мере, добавить еще несколько объяснений к своему ответу, чтобы другие могли извлечь из него урок
Нико


0

Использую операционную систему Windows.

Я убил весь процесс узла и перезапустил приложение, которое работало.

пытаться

taskkill /im node.exe

0

Используйте следующую команду, чтобы убить и перезапустить сервер узла из командного файла.

    @echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF


-3

Нажмите в cmd или bash: Ctrl + C


Это работает только в терминальном представлении с запущенным процессом узла и также не гарантирует его уничтожение.
Дизайн Адриана
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.