終了したプロセスはTCPポートをブロックします。

終了したプロセスはTCPポートをブロックします。

複数のコンピュータでこの問題が発生しました。ブロックされたポートを解放する方法はありますか?例は次のとおりです。

説明します。一部のポートが開いているSUSE Linux Enterprise Server 11 SP4で一部のJAVAプロセスを終了しました。 rootユーザーに "kill -9"コマンドを使用しました。ポートはまだブロックされているため、プロセスを再開できません。ポートが開いている間、アプリケーションは終了します。しかし、そのプロセスは間違いなく消えました!

コマンドを使用して(rootユーザーも使用して)表示すると、 netstat -anop | grep -E "Sta|37941" 次のような結果が得られます。

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    Timer
[...]
tcp        0      0 172.21.63.27:42034      172.21.63.28:37941      ESTABLISHED -                   keepalive (2861.75/0/0)
[...]

PIDは表示されません!プロセスを終了する前にプロセスのPIDを表示します。これらの「死んだ」ポートを解放する方法はありますか?アプリケーションを再起動するには、常にオペレーティングシステムを再起動する必要があります。ただし、これは高可用性システムにとって非常に重要です。それでは、後でプロセスを終了する必要がある場合はどうなりますか?この問題は、過去に他のUNIXオペレーティングシステムでも発生しました。

今後この問題の解決にご協力いただきありがとうございます。あらかじめ皆さんありがとうございます!

答え1

どのプロセス(PIDを含む)がポートを使用しているかを確認してください。

netstat -tupln |grep ":<Your_Port_Here>"

次に、PID(近くのプロセス名)を正常に終了します。パラメーターで kill コマンドを使用しないでください。

kill <pid>

注:一度も試したことがない場合は、反対投票をしないでください!

関連情報