Stoppen Sie alle Instanzen des Servers node.js.

181

Ich arbeite zum ersten Mal mit Node.js und bin auf dieses Problem gestoßen:

Ich habe einen Knotenserver über das Plugin einer IDE gestartet. Leider kann ich das IDE-Terminal nicht verwenden. Also habe ich versucht, das Skript über die Befehlszeile auszuführen.

Dies ist das Problem - ich verwende das Express-Modul und meine App überwacht einen Port (8080). Wenn ich die App über die Befehlszeile starte, wird der folgende Fehler ausgegeben:

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)

Obwohl ich nicht ganz sicher bin, was dieser Fehler sein könnte, habe ich angenommen, dass die App einen Port überwacht, der bereits verwendet wird. So tat ich:

netstat -an

Ich kann es sehen

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

Dies liegt daran, dass der Knotenserver bereits gestartet wurde, als ich versuchte, ihn über die IDE zu starten.

Ich möchte wissen, wie ich alle Serverinstanzen stoppen kann. Auch wenn Sie mir sagen können, wie ich erkennen kann, was auf einem Port läuft, und ihn töten kann.

Kiran Ambati
quelle
Entschuldigung, ich erwähne nicht, dass ich mich in einer Windows-Umgebung befinde. Bitte posten Sie relevante Befehle. Vielen Dank
Kiran Ambati
Außerdem finden Sie die Aufgabe node.js in Ihrem Windows-Taskmanager. Finden Sie den Fortschritt, dessen Name Node.js ist: Serverseitig ... und öffnen Sie die Detailinformationen. Sie finden die PID und die Details Ihres Nodejs-Fortschritts
Xiuying Lan
Dies ist die einzige für mich gearbeitet: superuser.com/questions/1183057/...
unnknown

Antworten:

416

Windows-Maschine:

Wenn Sie einen Node.js-Server beenden müssen und keine anderen Node-Prozesse ausgeführt werden, können Sie Ihren Computer anweisen, alle genannten Prozesse abzubrechen node.exe. Das würde so aussehen:

taskkill /im node.exe

Wenn die Prozesse weiterhin bestehen, können Sie das Beenden der Prozesse durch Hinzufügen des /fFlags erzwingen :

taskkill /f /im node.exe

Wenn Sie eine genauere Steuerung benötigen und nur einen Server beenden müssen, der an einem bestimmten Port ausgeführt wird, können netstatSie die Prozess-ID ermitteln und anschließend ein Kill-Signal an ihn senden. In Ihrem Fall, in dem sich der Port befindet 8080, können Sie Folgendes ausführen:

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

Die fünfte Spalte der Ausgabe ist die Prozess-ID:

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

Sie könnten dann den Prozess mit beenden taskkill /pid 14828. Wenn sich der Prozess nicht beenden lässt, fügen Sie /fdem Befehl einfach den Parameter (force) hinzu.


Linux-Maschine:

Der Prozess ist fast identisch. Sie können entweder alle auf dem Computer ausgeführten Knotenprozesse beenden (verwenden, -$SIGNALwenn dies SIGKILLnicht ausreicht):

killall node

Oder netstatSie können auch die PID eines Prozesses ermitteln, der einen Port überwacht:

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

Die Prozess-ID ist in diesem Fall die Nummer vor dem Prozessnamen in der sechsten Spalte, die Sie dann an den killBefehl übergeben können:

$ kill 1073

Wenn der Prozess nicht beendet werden soll , verwenden Sie einfach das -9Flag, das a ist SIGTERMund nicht ignoriert werden kann:

$ kill -9 1073
Hexacyanid
quelle
1
Entschuldigung, wie genau kann ich diese Befehle verwenden? process.exit () könnte im Code sein? Der Server ist jedoch bereits gestartet. Es ist wahrscheinlich, dass es mit dem Befehl node app.js gestartet wird, nicht jedoch mit node-dev app.js. Und "Node Killall" funktioniert nicht. Mache ich es falsch Vielen Dank
Kiran Ambati
1
process.exit()In Ihrer Anwendung wird die NodeJS-Instanz geschlossen. killall nodein bash würde alle NodeJS-Instanzen töten, die auf Ihrem Computer ausgeführt werden.
Hexacyanid
danke @hexacyanide. Ich entwickle auf Windows. Macht das den Killall-Knoten zu einem ungültigen Befehl, weil ich ihn nicht über die Befehlszeile verwenden kann?
Kiran Ambati
2
Versuchen Sie es taskkill /IM node.exe. Alle genannten Prozesse werden abgebrochen node.exe.
Hexacyanid
1
Ich musste taskkill / F / IM node.exe verwenden, damit es funktioniert, danke!
Luis
74

Der schnellste Weg ist

killall node

Funktioniert mit Linux, OS X.

zag2art
quelle
Einfache Methode, aber wenn eine andere Anwendung ausgeführt wird, müssen wir genauer sein.
Rajeev Uppala
funktioniert bei mir nicht node: no process foundAuch wenn ich nach Knotenprozessen suche, die auf dem bestimmten Port ausgeführt werden, hat die Prozess-ID -anstelle einer Nummer selbst.
Giorgi Gvimradze
49

Sie können lsofden Prozess abrufen, der an den erforderlichen Port gebunden ist.

Leider scheinen die Flags je nach System unterschiedlich zu sein, aber unter Mac OS X können Sie sie ausführen

lsof -Pi | grep LISTEN

Zum Beispiel bekomme ich auf meinem Computer so etwas wie:

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)

Die zweite Nummer ist die PID und der Port, den sie hören, befindet sich rechts vor "(LISTEN)". Finden Sie die Schurken-PID und kill -9 $PIDbeenden Sie mit extremen Vorurteilen.

Jacob Grundwasser
quelle
Hallo Jacob, bitte kannst du die Antwort bearbeiten und die Windows-Version hinzufügen, da ich unter Windows entwickle. Vielen Dank
Kiran Ambati
Ich habe keine Ahnung, wie es unter Windows geht, sorry Kiran.
Jacob Grundwasser
Dies ist eine gute Antwort, insbesondere wenn mehrere Knotenserver an verschiedenen Ports ausgeführt werden. Ich kann die Prozess-IDs, die an jedem Port ausgeführt werden, leicht unterscheiden.
Modulitos
24

Windows & GitBash Terminal Ich musste diesen Befehl im Windows / Webstorm / GitBash Terminal verwenden

cmd "/C TASKKILL /IM node.exe /F"
Enkode
quelle
2
Dieser hat es für mich getan. Vielen Dank
Adim Victor
16

Wenn Sie einen bestimmten Knotenprozess beenden möchten, können Sie zur Befehlszeilenroute gehen und Folgendes eingeben:

ps aux | grep node

um eine Liste aller Knotenprozess-IDs zu erhalten. Jetzt können Sie Ihre Prozess-ID (pid) abrufen und dann Folgendes tun:

kill -9 PID

und wenn Sie alle Knotenprozesse beenden möchten, gehen Sie wie folgt vor:

killall -9 node

-9 Schalter ist wie Endaufgabe unter Windows. Dadurch wird der Prozess beendet. du kannst tun:

kill -l

um alle Schalter des Kill-Befehls und ihre Kommentare zu sehen.

Ali_Hr
quelle
8

Sie können dies versuchen:

taskkill /IM node.exe -F

quelle
7

Linux

Um deine Freunde zu beeindrucken

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

Aber an diesen wirst du dich erinnern

killall node
Alex Nolasco
quelle
3

Sie könnten auch versuchen:

killall nodejs

Emeka Mbah
quelle
1

Wenn Sie Windows verwenden, gehen Sie wie folgt vor:

1) Öffnen Sie den Task-Manager und suchen Sie nach diesem Prozess: http://prntscr.com/kv3uqx

2) Dann einfach mit der rechten Maustaste klicken und "Aufgabe beenden".

3) Das war's, jetzt werden alle npm-Befehle von Anfang an ausgeführt.

Hoffe es hilft jemandem!

Prost

Neil Bannet
quelle
1

Multiplattform, stabil, beste Lösung:

Verwenden Sie fkill , um den Prozess zu beenden , der Ihren Port beansprucht :

fkill -f :8080

Um fkill zu installieren, verwenden Sie den folgenden Befehl: npm i -g fkill

Dariusz Filipiak
quelle
1

Du kannst es versuchen

killall node

Sie können es auch versuchen

killall nodejs
Sultan Ali
quelle
Diese Befehle wurden bereits mehrfach veröffentlicht. Es ist in Ordnung, sie erneut zu veröffentlichen, aber dann sollten Sie Ihrer Antwort zumindest eine weitere Erklärung hinzufügen, damit andere daraus lernen können
Nico Haase,
1

es funktioniert gut in Windows 10

taskkill /f /im node.exe
Thavaprakash Swaminathan
quelle
0

Ich benutze Windows Betriebssystem.

Ich habe den gesamten Knotenprozess beendet und die funktionierende App neu gestartet.

Versuchen

taskkill /im node.exe
Sathya Baman
quelle
0

Verwenden Sie den folgenden Befehl, um den Knotenserver aus der Batchdatei zu beenden und neu zu starten

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

in Windows Befehl Typ Befehl Schlag:

taskkill / f / im node.exe

Hossein Kohzadi
quelle
-3

Drücken Sie cmd oder bash: Strg + C.

Altynbek S.
quelle
Dies funktioniert nur in der Terminalansicht, während der Knotenprozess ausgeführt wird, und garantiert auch nicht, dass der Prozess abgebrochen wird.
Entwurf durch Adrian