lsof -i :端口号是查占端口进程的首选命令,因其将端口视为特殊文件、支持精准匹配、无需管道过滤,配合sudo -P -n可快速定位监听进程并安全终止。

直接用 lsof -i :端口号 就能查到谁在占端口,简单明确,不需要绕弯子。
为什么 lsof 是首选
它把“端口”看作一种特殊文件,天然支持精准匹配。不像 netstat 或 ss 需要管道过滤,lsof 一条命令直达目标,输出字段清晰,尤其适合快速排障。
- 默认不加 sudo 可能看不到 root 或其他用户的进程,建议始终加 sudo
- 加 -P 避免把端口号转成服务名(比如 80 → http),确保看到真实数字
- 加 -n 跳过 DNS 解析,加快响应速度,避免卡顿
常用组合命令示例
查 8080 端口:
sudo lsof -i :8080 -P -n
输出类似:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 12345 appuser 45u IPv6 12345 0t0 TCP *:8080 (LISTEN)
- COMMAND 是进程名(如 java、nginx)
- PID 是进程 ID,后续终止就靠它
-
NAME 中的
*:8080 (LISTEN)表示正在监听该端口
查完之后怎么处理
确认是误占或可终止的进程后,有几种安全做法:
- 先用
ps -fp PID看完整启动命令,确认是不是你要关的服务 - 温和终止:
sudo kill PID(发 SIGTERM,给进程机会清理) - 强制终止:
sudo kill -9 PID(适用于无响应进程) - 一键杀掉并验证:
sudo lsof -t -i :8080 | xargs kill -9 && echo "已释放"
其他工具对比参考
如果 lsof 不可用,可临时换用:
-
sudo ss -tulnp | grep :8080—— 性能好,现代系统推荐 -
sudo netstat -tulnp | grep :8080—— 兼容老系统,但需安装 net-tools -
sudo fuser 8080/tcp—— 极简输出,只返回 PID,适合脚本调用










