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 von der Kommandozeile aus auszuführen.
Dies ist das Problem - ich verwende das Express-Modul und meine App hört einen Port (8080) an. Wenn ich die App über die Befehlszeile starte, wird diese Fehlermeldung 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, nahm ich an, dass die App auf einem bereits verwendeten Port hört. 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 von der IDE aus zu starten.
Ich möchte also wissen, wie ich alle Serverinstanzen stoppen kann? Auch wenn Sie mir sagen können, wie ich herausfinden kann, was an einem Port läuft und ihn abtöten.
Sie müssen einen Node.js-Server beenden, und es sind keine anderen Node-Prozesse aktiv. Sie können Ihrem Computer anweisen, alle Prozesse mit dem Namen node.exe
zu beenden. Das würde so aussehen:
taskkill /im node.exe
Wenn die Prozesse weiterhin bestehen, können Sie die Beendigung der Prozesse erzwingen, indem Sie das Flag /f
hinzufügen:
taskkill /f /im node.exe
Wenn Sie eine detailliertere Steuerung benötigen und nur einen Server beenden möchten, der an einem bestimmten Port ausgeführt wird, können Sie netstat
verwenden, um die Prozess-ID zu finden, und dann ein Kill-Signal senden. In Ihrem Fall, wo der Port 8080
ist, 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 den Prozess dann mit taskkill /pid 14828
beenden. Wenn der Vorgang nicht beendet werden soll, fügen Sie dem Befehl einfach den Parameter /f
(force) hinzu.
Der Prozess ist fast identisch. Sie können entweder alle Node-Prozesse beenden, die auf dem Computer ausgeführt werden (verwenden Sie -$SIGNAL
, wenn SIGKILL
nicht ausreichend ist):
killall node
Oder auch mit netstat
finden Sie die PID eines Prozesses, 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 Befehl kill
übergeben können:
$ kill 1073
Wenn der Prozess das Beenden des Prozesses nicht zulässt, verwenden Sie einfach das Flag -9
, das eine SIGTERM
ist und nicht ignoriert werden kann:
$ kill -9 1073
Der schnellste Weg ist
killall node
Funktioniert mit Linux, OS X
Sie können lsof
verwenden, um den Prozess abzurufen, der an den erforderlichen Port gebunden ist.
Leider scheinen sich die Flags je nach System zu unterscheiden, aber unter Mac OS X können Sie ausführen
lsof -Pi | grep LISTEN
Zum Beispiel bekomme ich auf meinem Rechner 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 gerade hören, ist rechts vor "(LISTEN)". Finden Sie die gefährliche PID und kill -9 $PID
, um mit extremen Vorurteilen zu enden.
Windows & GitBash-Terminal Ich musste diesen Befehl in Windows/Webstorm/GitBash-Terminal verwenden
cmd "/C TASKKILL /IM node.exe /F"
Sie können dies versuchen:
taskkill /IM node.exe -F
wenn Sie einen bestimmten Prozess beenden möchten, können Sie zur Befehlszeilenroute gehen:
ps aux | grep node
um die Prozess-ID zu erhalten und danndo:
kill -9 PID
und wenn Sie alle Prozesse beenden wollen, tun Sie:
killall -9 node
Linux
Um deine Freunde zu beeindrucken
ps aux | grep -i node | awk '{print $2}' | xargs kill -9
Aber das ist der, an den Sie sich erinnern werden
killall node
Sie könnten auch versuchen:
killall nodejs
du kannst es versuchen
killall node
sie können es auch versuchen
killall nodejs
Multiplattform, stabil, beste Lösung:
verwenden Sie - fkill, um den Prozess zu beenden, der Ihren Port belegt:
fkill -f :8080
Zur Installation von fkill verwenden Sie den Befehl: npm i -g fkill
es funktioniert gut in Windows 10
taskkill /f /im node.exe
Ich benutze Windows Betriebssystem.
Ich habe den gesamten Node-Prozess beendet und die App neu gestartet.
versuchen
taskkill /im node.exe
Wenn Sie Windows verwenden, folgen Sie diesen Anweisungen:
1) Öffnen Sie den Task-Manager. Suchen Sie nach diesem Prozess: http://prntscr.com/kv3uqx
2) Dann einfach Rechtsklick und "Aufgabe beenden".
3) Das ist es, jetzt laufen alle npm-Befehle vom Start aus.
Hoffe es hilft jemandem!
Prost
Verwenden Sie den folgenden Befehl, um den Knotenserver von der Batchdatei zu beenden und erneut zu starten
@echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF