我在几台机器上都遇到过这个问题。有什么办法可以释放这个被阻塞的端口吗?这是一个例子:
让我解释。我已经在 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>
注意:如果从未尝试过,请不要投票否决!