Ich teste einen Server, der in NodeJS unter Windows 7 geschrieben ist, und wenn ich versuche, den Tester in der Befehlszeile auszuführen, erhalte ich den folgenden Fehler
Error: listen EADDRINUSE
at errnoException (net.js:614:11)
at Array.0 (net.js:704:26)
at EventEmitter._tickCallback (node.js:192:40)
Wie kann ich das Problem beheben, ohne es neu zu starten?
sudo killall node
kann nützlich seinAntworten:
Dies bedeutet, dass die Adresse verwendet wird, an die Sie den Server binden möchten. Versuchen Sie es mit einem anderen Port oder schließen Sie das Programm über diesen Port.
quelle
node app.js
es mit Strg + C verwendet und gestoppt habe, aber nach dem ersten Mal trat das EADDRINUSE-Problem auf.npm start
Es scheint also die wirkliche Lösung zu sein, etwas anderes als Strg + C zu verwenden, um es nach der Verwendung herunterzufahrennpm start
.npm start
Skript kann mehr als ein Knotenprogramm oder ein Knotenprogramm sein, das im Hintergrund ausgeführt wird, oder das Programm verfügt möglicherweise über untergeordnete Prozesse, die diesen Port verwenden.ps aux | grep node
die Prozess-ID gefunden (zweite Spalte) und sie einfach mit getötetkill <pid>
(meine warkill 18762
).Lauf:
Sie erhalten so etwas wie:
Dann mach:
quelle
kill -15 60778
wäre viel besser, da der ProzessSIGTERM
stattdessenSIGKILL
Unter Linux (mindestens Ubuntu-Derivate)
ist einfacher als diese Form.
Beides funktioniert nicht, wenn ein verwaistes Kind den Hafen hält. Tun Sie stattdessen Folgendes:
Wenn der Port gehalten wird, sehen Sie ungefähr Folgendes:
Jetzt töte durch pid:
quelle
<pid>/<parent>
bekomme ich-
Mit dem folgenden Befehl erhalten Sie eine Liste der ausgeführten Knotenprozesse.
Beenden Sie den Vorgang wie folgt, um diesen Port freizugeben.
quelle
| grep -v grep
, um dengrep
Prozess auszuschließen .pidof node
pidof
war einfach für mich auf osx mit homebrew installiertbrew install pidof
Sie erhalten den Fehler,
EADDRINUSE
weil der Port, den Ihre Anwendung verwenden möchte, von einem anderen Prozess belegt wird. Um diesen Port freizugeben, müssen Sie den Belegungsprozess beenden.Da Sie unter Windows arbeiten , können Sie den Vorgang über die Eingabeaufforderung (
cmd
) beenden . Mit dem könnencmd
Sie die Prozess-ID (PID) der blockierenden Anwendung ermitteln. Sie benötigen die PID, um den Prozess zu beenden / abzubrechen.Hier ist eine Schritt-für-Schritt-Anleitung ...
Suchen Sie alle Prozesse, die auf einem angegebenen Port ausgeführt werden (in diesem Beispiel ist Port "3000"):
Der
netstat
Befehl listet alle Prozesse auf, die am angegebenen Port ausgeführt werden. In der letzten Spalte dernetstat
Ergebnisse sehen Sie dasPID
s (in diesem Beispiel ist die PID "8308"). Weitere Informationen zu einem bestimmtenPID
Befehl erhalten Sie, indem Sie den folgenden Befehl ausführen :Wenn Sie einen Prozess beenden möchten, können Sie dies mit dem folgenden Befehl tun, indem Sie dessen verwenden
PID
(in diesem Beispiel lautet die PID "8308"):Bildschirmfoto
quelle
Wenn Sie eine Fehlermeldung erhalten Fehler: Hören Sie EADDRINUSE,
Versuchen Sie, die folgenden Shell-Befehle auszuführen:
Ich habe
grep
für 8080 gearbeitet, weil ich weiß, dass mein Server auf Port 8080 ausgeführt wird. (static
Sagt mir beim Starten: "Serving". "Unter http://127.0.0.1:8080 '.) Möglicherweise müssen Sie nach einem anderen suchen Hafen.quelle
Angenommen, Ihr Server läuft weiter
port 3000
nach diesem Gebrauch
kill -9 <pid>
im obigen Fall
sudo kill -9 11716
quelle
Verwenden Sie den folgenden Befehl, um einen Prozess zu beenden, der an einem bestimmten Port ausgeführt wird - 3000 in diesem Beispiel unten
quelle
Eine mögliche Lösung, die für mich funktionierte, bestand darin, einfach das Fenster im Browser zu schließen, in dem das entsprechende Skript " http: // localhost: 3000 / " ausgeführt wurde.
quelle
Überprüfen Sie die Prozess-ID
sudo lsof -i: 8081
Dann töte den bestimmten Prozess
Sudo töten -9 2925
quelle
Wenn Sie eine Fehlermeldung erhalten
Öffnen Sie die Eingabeaufforderung und geben Sie die folgenden Anweisungen ein:
Starten Sie danach die Telefonlückenschnittstelle neu.
Wenn Sie wissen möchten, welche Prozess-ID phonegap verwendet, öffnen Sie TASK MANAGER, sehen Sie sich die Spaltenüberschrift PID an und suchen Sie die PID-Nr.
quelle
Der oben erwähnte
killall -9
Knoten, der von Patrick vorgeschlagen wurde, funktioniert wie erwartet und löst das Problem. Möglicherweise möchten Sie jedoch den Bearbeitungsteil dieser Antwort lesen, um herauszufinden, warumkill -9
möglicherweise nicht der beste Weg ist.Darüber hinaus möchten Sie möglicherweise auf einen einzelnen Prozess abzielen, anstatt alle aktiven Prozesse blind zu beenden.
In diesem Fall rufen Sie zuerst die Prozess-ID (PID) des Prozesses ab, der an diesem Port ausgeführt wird (z. B. 8888):
Dies wird ungefähr Folgendes zurückgeben:
(HÖREN) Dann machen Sie einfach (ps - eigentlich nicht. Bitte lesen Sie weiter unten):
quelle
Sie können Ihren Port in app.js oder in Ihrer Projektkonfigurationsdatei ändern.
Standard ('Port', 80)
und um zu sehen, ob Port 80 bereits verwendet wird, können Sie dies tun
netstat -antp | grep 80
netstat -antp | grep-Knoten
Vielleicht möchten Sie sehen, ob der Knotenprozess bereits ausgeführt wird oder nicht.
ps -ef | grep-Knoten
und wenn Sie feststellen, dass es bereits läuft, können Sie es mit töten
Killall-Knoten
quelle
Dies funktioniert auf dem Mac:
Schritt 1.
Der obige Befehl gibt Ihnen die Prozess-IDs an, die derzeit den Port halten.
Schritt 2.
quelle
Ich habe 2 Server erstellt, die denselben Port 8081 überwachen und beim Lernen mit demselben Code ausgeführt werden
Die erste Servererstellung hat funktioniert. Die zweite Servererstellung ist mit EADDRINUSE fehlgeschlagen
Die Rückrufverzögerungen von node.js sind möglicherweise der Grund dafür, dass weder funktioniert noch die Erstellung des zweiten Servers eine Ausnahme hatte und das Programm beendet wurde, sodass der erste Server ebenfalls geschlossen wird
2 Server Problem Hinweis, ich habe von: Wie behebe ich Fehler: Hören Sie EADDRINUSE, während Sie nodejs verwenden?
quelle
Fehler: Hören Sie EADDRINUSE, um es in Ubuntu zu lösen, laufen Sie im Terminal
netstat -nptl
und danachkill -9 {process-number}
ist dieser Befehl Knoten Prozess zu töten , und jetzt können Sie versuchen Sie es erneut server.js Knoten ausgeführt BefehlEx
höre EADDRINUSE ::: 8080
netstat -nptl
tcp6 0 0 ::: 9000 ::: * LISTEN 9660 / java
tcp6 0 0 ::: 5800 ::: * LISTEN -
tcp6 0 0 ::: 5900 ::: * LISTEN -
tcp6 0 0 ::: 8080 :: : * LISTEN 10401 / node
tcp6 0 0 ::: 20080 ::: * LISTEN 9660 / java
tcp6 0 0 ::: 80 ::: * LISTEN -
tcp6 0 0 ::: 22 ::: * LISTEN -
tcp6 0 0 ::: 10137 ::: * HÖREN 9660 / Java
töte -9 10401
quelle
netstat
unterschiedliche Parameter empfangen.netstat -a -p tcp -b -v
würde den Prozessnamen ausgeben.Ich habe Node Red auf meinem Mac und meinem Raspberry Pi installiert. Hatte genau das gleiche Problem und 'Killall' zu machen half nicht. Nachdem ich den Raspberry Pi heruntergefahren und meinen Computer neu gestartet hatte, funktionierte er einwandfrei.
quelle
Möglicherweise haben Sie versucht, den Befehl npm start auf zwei verschiedenen Registerkarten auszuführen. Sie können npm start nicht ausführen, wenn er bereits auf einer Registerkarte ausgeführt wird. Überprüfen Sie ihn einmal.
quelle
Wenn Sie alle oben genannten Schritte ausgeführt haben, den Rouge-Vorgang jedoch immer noch nicht finden können, versuchen Sie es erneut. Stellen Sie jedoch sicher, dass Sie "sudo" vor den Befehlen einfügen.
quelle
Wenn Ihnen die Benutzeroberfläche besser gefällt, suchen Sie den Prozess Node.js im Windows-Task-Manager und beenden Sie ihn.
quelle
ps -ef | grep node find app.js, töte pid von app.js.
quelle
Töte den Knoten einfach als pkill -9-Knoten im Terminal von Ubantu als Startknoten
quelle
Sie müssen den Port beenden, indem Sie versuchen, den folgenden Befehl auf dem Terminal zu verwenden
quelle
[Gelöst]
Es ist vielleicht zu spät, aber es funktioniert wie ein Zauber.
Sie müssen
pm2
installiert seinSo stoppen Sie den aktuell laufenden Server (server.js):
quelle
Ich habe dieses Problem gelöst, indem ich unten in meiner package.json hinzugefügt habe , dass aktives PORT - 4000 (in meinem Fall), das unter WSL2 / Linux / Mac ausgeführt wird, beendet wurde
Quelle
quelle
Um den Knotenserver zu beenden, führen Sie zuerst diesen Befehl in Ihrem Terminal aus:
top
id
aus dem vorherigen Fenster.PID number -9 kill
Nachdem Sie Ihren Knotenserver beendet haben, versuchen Sie erneut, Ihre App auszuführen.quelle
Ich habe den Befehl
netstat -ano | grep "portnumber"
verwendet, um die Portnummer / PID für diesen Prozess aufzulisten. Anschließend können Sietaskkill -f //pid 111111
den Prozess beenden, wobei der letzte Wert die PID ist, die Sie im ersten Befehl finden.Ein Problem, auf das ich manchmal stoße, ist das erneute Auftauchen des Knotens, selbst nachdem der Prozess abgebrochen wurde. Daher muss ich den guten alten Task-Manager verwenden, um den Knotenprozess manuell abzubrechen.
quelle
Führen Sie im Fenster diesen Befehl aus:
quelle