Ports öffnen
Wenn Sie viel Socket-Programmierung durchführen, kommt es oft vor, dass ein Serverprogramm beim erneuten Kompilieren/Neustart keine Verbindung zu einer bestimmten Portnummer herstellen kann, da diese Portnummer bereits verwendet wird.
Um die Portnummer manuell zu schließen, muss zuerst der Prozessname/die ID herausgefunden werden, der den Port offen hält, und dann den Kill-Befehl für diesen Prozess verwenden.
lsof
$ lsof -i :8888 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 8461 enlightened 11u IPv6 138527 0t0 UDP *:8888
Im obigen Beispiel sieht man, dass Port 8888 vom Java-Befehl mit PID 8461 verwendet wird.
Beenden Sie jetzt den Prozess, indem Sie einen der folgenden Schritte ausführen
$ kill 8461 $ killall -9 8461 $ killall -9 java
netstat
Der Befehl netstat kann auch verwendet werden, um herauszufinden, welcher Prozess eine bestimmte Portnummer besitzt
$ netstat -u -ap (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 *:18347 *:* - udp 0 0 localhost:11211 *:* - udp 0 0 localhost:36254 localhost:36254 ESTABLISHED - udp 0 0 localhost:domain *:* - udp 0 0 *:ipp *:* - udp 0 0 *:42038 *:* - udp 0 0 *:17500 *:* 4090/dropbox udp 0 0 *:mdns *:* - udp 0 0 localhost:58797 localhost:7777 ESTABLISHED 9831/ncat udp 0 0 localhost:42724 localhost:domain ESTABLISHED - udp6 0 0 [::]:46282 [::]:* - udp6 0 0 [::]:mdns [::]:* - udp6 0 0 [::]:9999 [::]:* 11598/java
Der Port, den wir hier schließen möchten, ist 9999. Und netstat zeigt, dass die PID =11598 und der Befehlsname =Java
Hier drüben haben wir das -u für den UDP-Port verwendet. Wenn es sich um einen TCP-Port handelt, wird der Schalter u nicht benötigt.
$ sudo netstat -ap | grep :9050 tcp 0 0 localhost:9050 *:* LISTEN 1613/tor
Sobald die Prozess-ID/Name gefunden wurde, beenden Sie ihn mit dem Kill-Befehl.
$ kill 11598
Fixierer
Der Befehl fuser kann auch verwendet werden, um die PID des Programms herauszufinden. Der Syntax ist
fuser -k -n protocol portno
Kurzes Beispiel
$ fuser -k -n udp 7777 7777/udp: 11774