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


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

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


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.


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"

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.


8

Możesz spróbować tego:

taskkill /IM node.exe -F

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


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.


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


1

możesz spróbować

killall node

możesz też spróbować

killall nodejs

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


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

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.