zatrzymaj wszystkie wystąpienia serwera node.js.

186

Po raz pierwszy pracuję z Node.js i napotkałem ten problem:

Uruchomiłem serwer Node za pośrednictwem wtyczki IDE. Niestety nie mogę korzystać z terminala IDE. Więc spróbowałem uruchomić skrypt z linii poleceń.

To jest problem - używam modułu Express, a moja aplikacja nasłuchuje portu (8080). Kiedy uruchamiam aplikację z wiersza poleceń, zgłasza ten błąd:

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)

Chociaż nie jestem pewien, jaki może być ten błąd, założyłem, że dzieje się tak, ponieważ aplikacja nasłuchuje na porcie, który jest już używany. Więc zrobiłem:

netstat -an

widze

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

Dzieje się tak, ponieważ serwer Node jest już uruchomiony, gdy próbowałem go uruchomić z IDE.

Więc chcę wiedzieć, jak mogę zatrzymać wszystkie instancje serwera? Również jeśli możesz mi powiedzieć, jak wykryć, co działa na porcie i zabić.

Kiran Ambati
źródło
1
Przepraszam, nie wspomnę, że pracuję w środowisku Windows. Prosimy o publikowanie odpowiednich poleceń. Dzięki
Kiran Ambati,
a także możesz znaleźć zadanie node.js w menedżerze zadań systemu Windows. znajdź postęp, który nazywa się Node.js: po stronie serwera ... i otwórz szczegółowe informacje, znajdziesz pid i szczegóły postępów nodejs
Xiuying Lan
To jest ten, który pracował dla mnie: superuser.com/questions/1183057/…
nieznany

Odpowiedzi:

422

Komputer z systemem Windows:

Musisz zabić serwer Node.js, a nie masz uruchomionych żadnych innych procesów Node, możesz powiedzieć swojej maszynie, aby zabiła wszystkie wymienione procesy node.exe. To wyglądałoby tak:

taskkill /im node.exe

A jeśli procesy nadal się utrzymują, możesz wymusić ich zakończenie, dodając /fflagę:

taskkill /f /im node.exe

Jeśli potrzebujesz bardziej szczegółowej kontroli i chcesz zabić tylko serwer działający na określonym porcie, możesz użyć netstatdo znalezienia identyfikatora procesu, a następnie wysłać do niego sygnał zabicia. Więc w twoim przypadku, gdzie jest port 8080, możesz uruchomić następujące:

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

Piąta kolumna danych wyjściowych to identyfikator procesu:

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

Możesz wtedy zabić proces za pomocą taskkill /pid 14828. Jeśli proces odmawia zakończenia, po prostu dodaj parametr /f(force) do polecenia.


Maszyna z systemem Linux:

Proces jest prawie identyczny. Możesz albo zabić wszystkie procesy Node uruchomione na komputerze (użyj, -$SIGNALjeśli SIGKILLjest niewystarczające):

killall node

Lub też używając netstat, możesz znaleźć PID procesu nasłuchującego na porcie:

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

Identyfikator procesu w tym przypadku to liczba przed nazwą procesu w szóstej kolumnie, którą można następnie przekazać do killpolecenia:

$ kill 1073

Jeśli proces odmawia zakończenia, po prostu użyj -9flagi, która jest a SIGTERMi nie można jej zignorować:

$ kill -9 1073
heksacyjanek
źródło
1
przepraszam, jak dokładnie mogę używać tych poleceń? process.exit () może być w kodzie? ale serwer jest już uruchomiony. Prawdopodobnie jest uruchamiany za pomocą węzła poleceń app.js, ale nie za pomocą node-dev app.js. A „node killall” nie działa. Czy robię to źle? Dziękuję
Kiran Ambati
1
process.exit()w aplikacji powoduje zamknięcie instancji NodeJS. killall nodew bash zabiłoby wszystkie instancje NodeJS uruchomione na twoim komputerze.
heksacyjanid
dzięki @hexacyanide. Rozwijam się na oknach. Czy to sprawia, że ​​węzeł killall jest nieprawidłowym poleceniem, ponieważ nie mogę go użyć z wiersza poleceń.
Kiran Ambati,
3
Spróbuj taskkill /IM node.exe. Zabije wszystkie wymienione procesy node.exe.
heksacyjanid
1
Musiałem użyć taskkill / F / IM node.exe, aby to działało, dzięki!
Luis
75

Najszybszy sposób

killall node

Działa z systemami Linux, OS X

zag2art
źródło
Prosta metoda, ale jeśli uruchomiona jest jakakolwiek inna aplikacja, musimy być bardziej szczegółowi.
Rajeev Uppala
nie działa dla mnie. node: no process foundRównież gdy szukam procesów węzła, które działają na określonym porcie, identyfikator procesu ma -zamiast samego numeru.
Giorgi Gvimradze
49

Możesz użyć lsofget procesu, który został powiązany z wymaganym portem.

Niestety flagi wydają się być różne w zależności od systemu, ale na Mac OS X można uruchomić

lsof -Pi | grep LISTEN

Na przykład na moim komputerze otrzymuję coś takiego:

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)

Druga liczba to PID, a port, którego nasłuchują, znajduje się po prawej stronie przed „(LISTEN)”. Znajdź nieuczciwego PIDa i kill -9 $PIDzakończ ze skrajnym uprzedzeniem.

Jacob Groundwater
źródło
Cześć Jacob, czy możesz edytować odpowiedź i dodać wersję dla Windows, ponieważ rozwijam się w systemie Windows. Dziękuję
Kiran Ambati,
Nie mam pojęcia, jak to zrobić w systemie Windows, przepraszam Kiran.
Jacob Groundwater
To świetna odpowiedź, zwłaszcza gdy na różnych portach działa wiele serwerów węzłów. Mogę łatwo odróżnić ID procesu działającego na każdym porcie.
modulitos
25

Terminal Windows i GitBash Musiałem użyć tego polecenia w terminalu Windows / Webstorm / GitBash

cmd "/C TASKKILL /IM node.exe /F"
Enkode
źródło
3
Ten zrobił to dla mnie. Dzięki
Adim Victor
1
Ten też zrobił to dla mnie. Znalazłem najszybszy sposób na zabicie wszystkich procesów węzłów w systemie Windows.
Asad
17

jeśli chcesz zabić określony proces węzła, możesz przejść do trasy wiersza poleceń i wpisać:

ps aux | grep node

aby uzyskać listę wszystkich identyfikatorów procesów węzła. teraz możesz uzyskać identyfikator procesu (pid), a następnie wykonaj:

kill -9 PID

a jeśli chcesz zabić wszystkie procesy węzłów, zrób:

killall -9 node

Przełącznik -9 jest jak zakończenie zadania w systemie Windows. wymusi to zakończenie procesu. możesz to zrobić:

kill -l

aby zobaczyć wszystkie przełączniki polecenia kill i ich komentarze.

Ali_Hr
źródło
8

Możesz spróbować tego:

taskkill /IM node.exe -F

źródło
7

Linux

Zaimponować znajomym

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

Ale to jest ten, który zapamiętasz

killall node
Alex Nolasco
źródło
3

Możesz też spróbować:

killall nodejs

Emeka Mbah
źródło
2

Jeśli używasz systemu Windows, wykonaj następujące czynności:

  1. Otwórz menedżera zadań, poszukaj tego procesu: Menedżer zadań pokazujący proces Node - JavaScript po stronie serwera Node.js

  2. Następnie kliknij prawym przyciskiem myszy i „Zakończ zadanie”.

  3. To wszystko, teraz wszystkie polecenia npm działają od początku.

Neil Bannet
źródło
1

Wieloplatformowe, stabilne, najlepsze rozwiązanie:

użyj fkill, aby zabić proces zabierający twój port:

fkill -f :8080

Aby zainstalować fkill, użyj polecenia: npm i -g fkill

Dariusz Filipiak
źródło
1

możesz spróbować

killall node

możesz też spróbować

killall nodejs
Sultan Ali
źródło
Te polecenia były już publikowane wiele razy. W porządku, aby opublikować je ponownie, ale powinieneś przynajmniej dodać więcej wyjaśnień do swojej odpowiedzi, tak aby inni mogli się z nich uczyć
Nico Haase
1

działa dobrze w systemie Windows 10

taskkill /f /im node.exe
Thavaprakash Swaminathan
źródło
0

Używam systemu operacyjnego Windows.

Zabiłem cały proces węzła i ponownie uruchomiłem aplikację, która działała.

próbować

taskkill /im node.exe
Sathya Baman
źródło
0

Użyj następującego polecenia, aby zabić i ponownie uruchomić serwer węzła z pliku wsadowego

    @echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF
Samadhan Virkar
źródło
0

w oknie polecenie Wpisz polecenie cios:

taskkill / f / im node.exe

Hossein Kohzadi
źródło
-3

Wciśnij cmd lub bash: Ctrl + C

Altynbek S.
źródło
Działa to tylko w widoku terminala z uruchomionym procesem węzła i nie gwarantuje również zabicia procesu.
Projekt Adriana