Ich habe Port # 5955 von einer Java-Klasse aus geöffnet, um von einem Client aus zu kommunizieren. Wie schließe ich diesen Port, nachdem ich fertig bin? und auch welcher Befehl kann mir zeigen, ob Port offen oder geschlossen ist?
197
Antworten:
Finden Sie die Prozess-ID (PID) heraus, die die Portnummer (z. B. 5955) belegt, die Sie freigeben möchten
Beenden Sie den Prozess, der derzeit den Port verwendet, mit seiner PID
quelle
kill PID
(was -15 impliziert) und dann -2 und -1 versuchen. -9 ist nur dann der letzte Ausweg, wenn alle anderen Optionen nicht funktionieren.Um den Prozess zu finden, versuchen Sie:
Beenden Sie den Prozess, der derzeit den Port verwendet, mit seiner PID
und überprüfen Sie dann, ob der Port geschlossen ist. Wenn nicht, versuchen Sie:
Ich würde nur folgendes tun, wenn das vorherige nicht funktioniert hätte
Nur um sicher zu gehen. Je nachdem, wie Sie den Port geöffnet haben, spielt dies möglicherweise keine Rolle.
quelle
Wie auch immer Sie den Port geöffnet haben, Sie schließen ihn auf die gleiche Weise. Wenn Sie beispielsweise einen Socket erstellt, an Port 0.0.0.0:5955 gebunden und listen aufgerufen haben, schließen Sie denselben Socket.
Sie können auch einfach den Prozess beenden, bei dem der Port geöffnet ist.
Wenn Sie herausfinden möchten, in welchem Prozess ein Port geöffnet ist, versuchen Sie Folgendes:
Wenn Sie wissen möchten, ob ein Port geöffnet ist, können Sie denselben Befehl lsof ausführen (wenn ein Prozess ihn geöffnet hat, ist er geöffnet; andernfalls nicht), oder Sie können einfach versuchen, eine Verbindung zu ihm herzustellen, z.
Wenn es sofort ohne Ausgabe zurückkehrt, ist der Port nicht geöffnet.
Es kann erwähnenswert sein, dass es sich technisch gesehen nicht um einen offenen Port handelt, sondern um eine Kombination aus Host und Port. Wenn Sie beispielsweise als 10.0.1.2 an ein LAN angeschlossen sind, können Sie einen Socket an 127.0.0.1:5955 oder 10.0.1.2:5955 binden, ohne dass sich einer auf den anderen auswirkt, oder Sie können an 0.0.0.0 binden : 5955, um beide gleichzeitig zu behandeln. Mit dem
ifconfig
Befehl können Sie alle IPv4- und IPv6-Adressen Ihres Computers anzeigen .quelle
sehr einfach Port 5900 finden:
dann 59553 als PID betrachten
quelle
Im Jahr 2018 hat Folgendes für mich mit MacOS HighSierra funktioniert:
sudo lsof -nPi: yourPortNumber
dann:
sudo kill -9 yourPIDnumber
quelle
lsof -nPi
ist etwas besser, da die Portnummer tatsächlich in der Ausgabe sichtbar ist und Sie ein besseres Gefühl dafür bekommen, was Sie töten.sudo lsof -nPi | grep LISTEN
Ein Liner ist am besten
Beispiel: Auf dem Mac wollte Port 9604 löschen. Der folgende Befehl funktionierte wie ein Zauber
quelle
Mit diesem ersten Befehl können Sie auch einen Prozess beenden, der einen bestimmten Port besitzt:
Angenommen, dieser Prozess enthält Port 8000 TCP und führt dann den folgenden Befehl aus:
gibt die Zeile aus, die dem Prozesshalteport 8000 entspricht , zum Beispiel:
In diesem Fall ist procHoldingPort der Name des Prozesses, der den Port geöffnet hat, 4683 ist seine PID und 8000 (beachten Sie, dass es sich um TCP handelt) ist die Portnummer, die er enthält (die Sie schließen möchten).
Beenden Sie dann den Vorgang gemäß dem obigen Beispiel:
Wie andere hier erwähnt haben, wenn das nicht funktioniert (Sie können versuchen, kill mit -9 als Argument zu verwenden):
Auch hier ist es im Allgemeinen besser, das Senden von SIGKILL (-9) zu vermeiden, wenn Sie können.
Prost,
Kerl.
quelle
Ich benutze
lsof
kombiniert mitkill
, wie oben erwähnt; schrieb aber ein kurzes kleines Bash-Skript, um diesen Prozess zu automatisieren.Mit diesem Skript können Sie einfach
killport 3000
von überall aus tippen und alle auf dem Port ausgeführten Prozesse werden abgebrochen3000
.https://github.com/xtrasimplicity/killport
quelle
lsof
in Kombination mitkill
nichts zurückgegeben und mein Skript unter macOS Sierra hängen gelassen. Funktioniert aberkillport
wie ein Zauber und ist schneller. Vielen Dank!Ich habe zu diesem Zweck eine Funktion erstellt.
Durch Kopieren und Einfügen dieses Codeblocks in Ihr Terminal sollte der gewünschte Port freigegeben werden. Denken Sie daran, die Portnummer in der letzten Zeile zu ändern.
quelle
Versuchen Sie es unten, vorausgesetzt, der laufende Port ist
8000
:Ich habe die Referenz hier gefunden
quelle
Wenn das Programm, das den Port geöffnet hat, beendet wird, wird der Port automatisch geschlossen. Wenn Sie den Java-Prozess beenden, auf dem dieser Server ausgeführt wird, sollte dies der Fall sein.
quelle
Ermitteln Sie zuerst die Procees-ID (pid), die den erforderlichen Port belegt hat (z. B. 5434).
ps aux | grep 5434
2. Beenden Sie diesen Prozess
quelle