Linux 查看占用端口的进程

阿里云产品限时红包,最高 ¥1888 元,立即领取

在 linux 上,我们经常会遇到端口被占用,导致应用程序无法启动的情况,这时候就需要知道到底是哪个进程或是哪个程序占用了这个端口,以便进行后面的处理。

这里总结了几种方式。

使用 ss 查看

ss 一般用于转储套接字统计信息。它还可以显示所有类型的套接字统计信息,包括 PACKET、TCP、UDP、DCCP、RAW、Unix 域等。

1
2
3
~# ss -lntpd | grep :80
tcp LISTEN 0 100 0.0.0.0:8080 0.0.0.0:* users:(("java",pid=9184,fd=28))
tcp LISTEN 0 128 *:80 *:* users:(("docker-proxy",pid=8935,fd=4))

使用 netstat 查看

netstat 能够显示网络连接、路由表、接口统计信息、伪装连接以及多播成员。目前 netstat 已经过时了,都推荐使用 ss 来代替。

1
2
3
~# netstat -tnlp | grep :80
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 9184/java
tcp6 0 0 :::80 :::* LISTEN 8935/docker-proxy

使用 lsof 查看

lsof (list open files) 是一个列出系统上被进程打开的文件的相关信息。

1
2
3
~# lsof -i tcp:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 8935 root 4u IPv6 324024693 0t0 TCP *:http (LISTEN)

使用 fuser 查看

fuser 可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息。fuser 只把 PID 输出到标准输出,其他的都输出到标准错误输出。

1
2
~# fuser 80/tcp
80/tcp: 8935