如何在 Linux 上查找并停止占用端口的进程

发布日期:2026-06-14 10:02:46   浏览量 :7
发布日期:2026-06-14 10:02:46  
7

当您启动服务并出现 address already in use(地址已被使用)错误时,说明该端口已被其他程序占用。在 Linux 服务器上,您可以通过三个简短的步骤识别并停止该进程。本指南以 Ubuntu 22.04 为例,使用 sskill 命令,但该方法适用于任何现代发行版。

第一步 - 查找监听端口的进程

使用 ssnetstat 的现代替代工具)列出绑定到特定端口的进程——此处以端口 8080 为例:

sudo ss -ltnp 'sport = :8080'

这些标志的含义如下:-l 表示监听套接字,-t 表示 TCP,-n 表示显示数字形式的端口(不解析名称),-p 表示显示所属进程。输出结果末尾包含一个 users:(...) 字段,其中指明了程序名称及其进程 ID (PID):

State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
LISTEN  0       511     0.0.0.0:8080        0.0.0.0:*          users:(("nginx",pid=1432,fd=6))

此处的 PID 为 1432。使用 sudo 至关重要:如果不使用它,ss 将隐藏您非所属套接字的进程详细信息。

第二步 - 在操作前确认进程身份

切勿在未查看的情况下直接终止 PID。请检查其实际身份:

ps -p 1432 -o pid,user,cmd

这将打印完整的命令行和所属用户,确保您停止的是正确的目标,而非您依赖的系统服务:

  PID USER     CMD
 1432 www-data /usr/sbin/nginx -g daemon on; master_process on;

第三步 - 先优雅停止,再强制终止

首先发送 TERM 信号(默认信号)请求进程干净地关闭,这使其有机会关闭连接并刷新状态:

sudo kill 1432

等待一两秒后,重新运行第一步中的命令。如果端口已释放,则操作完成。如果进程忽略 TERM 信号仍在监听,则升级为使用 KILL 信号,进程无法捕获或忽略该信号:

sudo kill -9 1432

仅对卡死的进程保留使用 kill -9——因为它不给程序任何清理机会,可能会留下临时文件或失效的套接字。

结论

您使用 ss -ltnp 定位了绑定到端口的进程,通过 ps 进行了验证,并使用逐步升级的 kill 命令停止了它。将 sudo ss -ltnp 'sport = :PORT' 保存为 Shell 别名,可使下一次“地址已被使用”错误的修复时间缩短至十秒。

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 订阅 数据