зупинити всі екземпляри сервера 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. Будь ласка, публікуйте відповідні команди. Спасибі
Kiran Ambati

а також ви можете знайти завдання node.js у вашому Windowsmanager. знайдіть прогрес, який звуть 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до команди параметр (сила).


Машина 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 недійсною командою, оскільки я не можу використовувати його з командного рядка.
Кіран Амбаті

3
Спробуйте taskkill /IM node.exe. Це знищить усі названі процеси node.exe.
гексаціанід

1
Мені довелося використовувати taskkill / F / IM node.exe, щоб він працював, дякую!
Луїс

75

Найшвидший спосіб

killall node

Працює з Linux, OS X


Простий метод, але якщо працює будь-яка інша програма, то ми повинні бути більш конкретними.
Rajeev Uppala

не працює для мене. node: no process foundКрім того, коли я вітаю за процесом вузла, який працює на конкретному порту, ідентифікатор процесу має -замість самого числа.
Giorgi Gvimradze

49

Ви можете використовувати lsofget процес, який пов'язаний з необхідним портом.

На жаль, прапори здаються різними в залежності від системи, але на 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, а порт, який вони слухають, знаходиться праворуч перед "(LISTEN)". Знайдіть шахрайського PID та kill -9 $PIDприпиніть з крайнім упередженням.


Привіт Якобе, будь ласка, ти можеш відредагувати відповідь та додати версію Windows, тому що я розвиваюсь на Windows. Дякую
Кіран Амбаті

Я поняття не маю, як це зробити в Windows, вибачте Кіран.
Яків ґрунтові води

Це чудова відповідь, особливо коли на різних портах працює декілька серверів вузлів. Я можу легко відрізнити ідентифікатор процесу на кожному порту.
modulitos

25

Windows & GitBash Terminal Мені потрібно було використовувати цю команду всередині терміналу 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 перемикач - це як кінцеве завдання на Windows. це змусить процес закінчитися. Ви можете зробити:

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 - 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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.