释放TCP/IP端口?

204

netstat -tulnap 显示正在使用哪些端口。如何在Linux中释放一个端口?

11个回答

278

像其他人说的那样,您需要终止所有正在侦听该端口的进程。最简单的方法是使用fuser(1)命令。例如,要查看在端口80上侦听HTTP请求的所有进程(作为 root 运行或使用 sudo ):

# fuser 80/tcp

如果你想杀死它们,那么只需添加-k选项。


3
我发现向端口发送请求也会清理它(虽然我不是 Linux 专家) - Matej
3
在Debian上安装fuser:sudo apt-get install psmisc(http://bitflop.com/document/107) - Korneel
1
它可以工作,但我还需要在CentOs 7上安装psmisc(sudo yum install psmisc)。 - Marlon Bernardes
5
kill -9 $(fuser 80/tcp 2>/dev/null) - Hanynowsky

118
在Linux中杀死特定端口,请使用以下命令。

要在Linux中杀死特定的端口,请使用以下命令

sudo fuser -k Port_Number/tcp

Port_Number替换为您占用的端口。


12
这实际上终止了打开端口的进程,而不是端口本身。 - vinay chilakamarri

37

在终端中输入:

netstat -anp | grep "port_number"

它将显示端口的详细信息。转到最后一列。格式如下,例如:- PID / java

然后执行:

kill -9 PID

若为MAC系统:

lsof -n -i :'port-number' | grep LISTEN

示例响应:

java   4744 (PID)  test  364u  IP0 asdasdasda   0t0  TCP *:port-number (LISTEN)

然后执行:

kill -9 PID 

使用 MacBook 工作


1
如果该端口的PID列为空,则显然无法正常工作。 - Anentropic
3
如果您没有查看进程的权限,就会出现这种情况...尝试使用 sudo netstat 来实际查看 PID :) - Anentropic
我试图通过Putty CLI关闭Amazon EC2实例上的一个端口。Forever说它没有运行任何进程,但是该端口(用于Angular应用的4200端口)仍然开放。这是唯一对我有效的命令。 - vtechmonkey

20

检查所有端口:

netstat -lnp

关闭打开的端口:

fuser -k port_no/tcp

示例:

fuser -k 8080/tcp

在这两种情况下,如果需要,您可以使用sudo命令。


警告:fuser 终止进程而非端口。这意味着,如果端口陷入僵局,它是否能正常工作?这不是正确的答案。 - Owl
重复回答的前两个。 - Cadoiz

19

您可以使用tcpkilldsniff软件包的一部分)来关闭所需端口上的连接:

sudo tcpkill -9 port PORT_NUMBER

12
这个命令的意思是在端口5432上监听,并阻断相关TCP连接。具体执行方法为使用sudo运行tcpkill命令,然后加上参数“-9”和端口号“5432”。执行命令后,提示信息“tcpkill: listening on lxcbr0 [port 5432]”表示该命令已经开始监听端口5432。 - Anentropic

11

"netstat --programs" 命令会提供进程信息,假设你是 root 用户。然后你需要终止可能会重新启动的“有问题”的进程,这很可能只是为了让你烦恼。

根据占用这些端口的进程不同,解决该问题的方案也会有所不同,具体取决于你实际想要 达到 的目标。例如,你可能需要禁用服务(如果它们不需要)或配置它们使用其他端口(如果你确实需要它们但是需要该端口更多)。


6
杀掉监听所需端口的进程。我相信netstat会显示进程ID。

5
netstat -anp | grep <port> 最后一列显示了进程。 - user1747935

1

如果你真的想立即终止一个进程,可以发送一个 KILL 信号而不是 TERM 信号(后者是停止请求,前者将立即生效而无需任何清理)。这很容易实现:

kill -KILL <pid>

请注意,停止程序时,根据您正在停止的程序,其状态可能会严重损坏。通常情况下,只有在正常终止无法工作时才需要发送KILL信号。我想知道您尝试解决的潜在问题是什么,以及杀死进程是否是正确的解决方案。


这并没有解决我的SSH端口转发问题。sudo fuser -k Port_Number/tcp 解决了问题。 - Cadoiz

-2

我认为唯一的方法就是停止打开该端口的进程。


-8

sudo killall -9 "进程名"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接