Otevřené porty
Při velkém programování soketů se často stává, že se serverový program při rekompilaci/opětovném spuštění nedokáže navázat na konkrétní číslo portu, protože toto číslo portu je již používáno.
Chcete-li ručně zavřít číslo portu, musíte nejprve zjistit název/id procesu, který drží port otevřený, a poté u tohoto procesu použít příkaz kill.
lsof
$ lsof -i :8888 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 8461 enlightened 11u IPv6 138527 0t0 UDP *:8888
Ve výše uvedeném příkladu je vidět, že port 8888 je používán příkazem java s pid 8461.
Nyní ukončete proces provedením některého z následujících
$ kill 8461 $ killall -9 8461 $ killall -9 java
netstat
Příkaz netstat lze také použít ke zjištění, který proces drží určité číslo portu
$ 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
Port, který zde chceme zavřít, je 9999. A netstat ukazuje, že pid =11598 a název příkazu =java
Tady jsme použili -u pro port udp. Pokud je to tcp port, pak přepínač u není potřeba.
$ sudo netstat -ap | grep :9050 tcp 0 0 localhost:9050 *:* LISTEN 1613/tor
Jakmile je nalezeno id/název procesu, ukončete jej příkazem kill.
$ kill 11598
fixační jednotka
Ke zjištění pid programu lze také použít příkaz fuser. Sytanx je
fuser -k -n protocol portno
Rychlý příklad
$ fuser -k -n udp 7777 7777/udp: 11774