開いているポート
多くのソケットプログラミングを行う場合、再コンパイル/再実行時にサーバープログラムが特定のポート番号にバインドできないことがよくあります。これは、そのポート番号がすでに使用されているためです。
ポート番号を手動で閉じるには、最初にポートを開いたままにしているプロセス名/ IDを見つけてから、そのプロセスでkillコマンドを使用する必要があります。
lsof
$ lsof -i :8888 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 8461 enlightened 11u IPv6 138527 0t0 UDP *:8888
上記の例では、ポート8888がコマンドjavaとpid 8461によって使用されていることがわかります。
次に、次のいずれかを実行してプロセスを強制終了します
$ kill 8461 $ killall -9 8461 $ killall -9 java
netstat
netstatコマンドを使用して、特定のポート番号を保持しているプロセスを見つけることもできます
$ 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
ここで閉じたいポートは9999です。netstatは、pid=11598およびコマンド名=java
ここでは、udpポートに-uを使用したことを示しています。 tcpポートの場合、uスイッチは必要ありません。
$ sudo netstat -ap | grep :9050 tcp 0 0 localhost:9050 *:* LISTEN 1613/tor
プロセスID/名前が見つかったら、killコマンドで終了します。
$ kill 11598
フューザー
フューザーコマンドを使用して、プログラムのpidを見つけることもできます。 sytanxは
fuser -k -n protocol portno
簡単な例
$ fuser -k -n udp 7777 7777/udp: 11774