使用netstat或lsof命令可查看Linux系统中指定端口被哪个进程占用,netstat通过sudo netstat -tulnp | grep :端口号显示监听端口的PID和程序名,lsof通过sudo lsof -i :端口号列出使用该端口的进程信息,两者均需sudo权限以确保完整显示;若无法看到进程信息,可能因权限不足、端口处于TIME_WAIT/CLOSE_WAIT状态、工具局限性或网络命名空间隔离所致;可使用ss命令替代netstat以获得更高效的结果;确认占用进程后,可通过kill 1234(发送SIGTERM)尝试优雅终止,若无效再使用kill -9 1234(发送SIGKILL)强制终止,但需注意数据丢失风险;此外,nmap可用于检测端口开放状态,tcpdump用于抓包分析网络流量,firewall-cmd或ufw则用于管理防火墙规则以控制端口访问。

在Linux系统里,想知道某个特定端口到底被哪个程序霸占着,最直接、最常用的方法就是借助
netstat
lsof
要查看指定端口对应的进程,通常我会先尝试
netstat
sudo netstat -tulnp | grep :80
这里
-t
-u
-l
-n
-p
sudo
输出大概会是这样:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx: master
从
1234/nginx: master
nginx
如果
netstat
lsof
sudo lsof -i :80
这条命令会直接列出所有使用80端口的进程信息。输出会更详细一些:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1234 root 6u IPv4 56789 0t0 TCP *:http (LISTEN)
同样,
PID
COMMAND
lsof
netstat
lsof
这情况确实会让人挠头。我遇到过几次,通常有几个可能的原因。
首先,最常见的就是权限问题。如果你没有使用
sudo
netstat -p
lsof -i
sudo
其次,端口状态。有时候一个进程已经崩溃或退出,但它占用的端口并没有立即释放,而是进入了
TIME_WAIT
CLOSE_WAIT
netstat
再者,工具本身的局限性或系统环境。在一些较新的Linux发行版中,
netstat
ss
ss
iproute2
netstat
netstat
ss
sudo ss -tulnp | grep :80
ss
netstat
netstat
最后,还有一种比较少见但值得一提的情况是网络命名空间(Network Namespace)。如果你的应用运行在独立的网络命名空间中(比如Docker容器、Kubernetes Pod),那么你在宿主机上直接运行
netstat
lsof
当发现一个端口被不该占用的进程霸占,或者一个僵尸进程导致端口无法释放时,终止它就成了必要操作。这其实很简单,但需要谨慎。
步骤是这样的:
找到进程ID (PID):这是第一步,也是最关键的一步。我们已经知道怎么做了,用
sudo netstat -tulnp | grep :端口号
sudo lsof -i :端口号
1234
使用 kill
kill
最温和的方式是:
kill 1234
这会发送一个
SIGTERM
如果进程不响应
SIGTERM
SIGKILL
kill -9 1234
kill -9
-9
我个人经验是,先尝试不带
-9
kill
kill -9
执行
kill
netstat
lsof
sudo systemctl stop nginx
netstat
lsof
除了这两个“老兵”,Linux生态系统里还有不少工具,能帮助你更全面地理解和管理网络连接。它们各有侧重,用起来也挺有意思。
首先是前面提到的 ss
netstat
ss
netstat
ss
ss -s
要看所有监听中的套接字,以及它们的进程:
sudo ss -lptn
这和
netstat -tulnp
ss
awk
grep
然后是 nmap
nmap
nmap
nmap -p 80 localhost
它会告诉你端口是
open
closed
filtered
nmap
再来是 tcpdump
tcpdump
sudo tcpdump -i any port 80
这会实时显示所有进出80端口的网络流量。这对于调试网络应用、排查连接问题是不可或缺的,但需要一定的网络协议知识才能有效解读其输出。
最后,别忘了 firewall-cmd
ufw
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent sudo firewall-cmd --reload
而在Ubuntu/Debian上,使用
ufw
sudo ufw allow 80/tcp sudo ufw enable
这些工具虽然不直接显示进程,但它们是网络连接管理中不可或缺的一环,尤其是在确保服务可访问性和系统安全性方面。管理好它们,才能确保你的服务能正常对外提供。
以上就是Linux如何查看指定端口对应的进程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号