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ć.
Odpowiedzi:
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:A jeśli procesy nadal się utrzymują, możesz wymusić ich zakończenie, dodając
/f
flagę:Jeśli potrzebujesz bardziej szczegółowej kontroli i chcesz zabić tylko serwer działający na określonym porcie, możesz użyć
netstat
do znalezienia identyfikatora procesu, a następnie wysłać do niego sygnał zabicia. Więc w twoim przypadku, gdzie jest port8080
, możesz uruchomić następujące:Piąta kolumna danych wyjściowych to identyfikator procesu:
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,
-$SIGNAL
jeśliSIGKILL
jest niewystarczające):Lub też używając
netstat
, możesz znaleźć PID procesu nasłuchującego na porcie:Identyfikator procesu w tym przypadku to liczba przed nazwą procesu w szóstej kolumnie, którą można następnie przekazać do
kill
polecenia:Jeśli proces odmawia zakończenia, po prostu użyj
-9
flagi, która jest aSIGTERM
i nie można jej zignorować:źródło
process.exit()
w aplikacji powoduje zamknięcie instancji NodeJS.killall node
w bash zabiłoby wszystkie instancje NodeJS uruchomione na twoim komputerze.taskkill /IM node.exe
. Zabije wszystkie wymienione procesynode.exe
.Najszybszy sposób
Działa z systemami Linux, OS X
źródło
node: no process found
Również gdy szukam procesów węzła, które działają na określonym porcie, identyfikator procesu ma-
zamiast samego numeru.Możesz użyć
lsof
get 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ć
Na przykład na moim komputerze otrzymuję coś takiego:
Druga liczba to PID, a port, którego nasłuchują, znajduje się po prawej stronie przed „(LISTEN)”. Znajdź nieuczciwego PIDa i
kill -9 $PID
zakończ ze skrajnym uprzedzeniem.źródło
Terminal Windows i GitBash Musiałem użyć tego polecenia w terminalu Windows / Webstorm / GitBash
źródło
jeśli chcesz zabić określony proces węzła, możesz przejść do trasy wiersza poleceń i wpisać:
aby uzyskać listę wszystkich identyfikatorów procesów węzła. teraz możesz uzyskać identyfikator procesu (pid), a następnie wykonaj:
a jeśli chcesz zabić wszystkie procesy węzłów, zrób:
Przełącznik -9 jest jak zakończenie zadania w systemie Windows. wymusi to zakończenie procesu. możesz to zrobić:
aby zobaczyć wszystkie przełączniki polecenia kill i ich komentarze.
źródło
Możesz spróbować tego:
źródło
Linux
Zaimponować znajomym
Ale to jest ten, który zapamiętasz
źródło
Możesz też spróbować:
killall nodejs
źródło
Jeśli używasz systemu Windows, wykonaj następujące czynności:
Otwórz menedżera zadań, poszukaj tego procesu:
Następnie kliknij prawym przyciskiem myszy i „Zakończ zadanie”.
To wszystko, teraz wszystkie polecenia npm działają od początku.
źródło
Wieloplatformowe, stabilne, najlepsze rozwiązanie:
użyj fkill, aby zabić proces zabierający twój port:
Aby zainstalować fkill, użyj polecenia: npm i -g fkill
źródło
możesz spróbować
możesz też spróbować
źródło
działa dobrze w systemie Windows 10
źródło
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ć
źródło
Użyj następującego polecenia, aby zabić i ponownie uruchomić serwer węzła z pliku wsadowego
źródło
w oknie polecenie Wpisz polecenie cios:
taskkill / f / im node.exe
źródło
Wciśnij cmd lub bash: Ctrl + C
źródło