最准、最省事的方法是sudo lsof -i :端口号,因其将端口视为打开的文件,一次输出command、pid、user及*:端口(listen)等完整信息,加-p-n可提速避解析,不加sudo会漏掉root等用户进程。

直接用 sudo lsof -i :端口号,这是最准、最省事的方法。
为什么首选 lsof -i :端口
它把端口当作“打开的文件”处理,输出天然包含进程名(COMMAND)、PID、用户(USER)和监听状态(如 *:8080 (LISTEN)),字段清晰,不用再拼接 grep 或 awk。相比 ss 或 netstat,它不依赖 /proc/[pid]/exe 的读取权限,在容器环境或 SELinux 强制模式下也更大概率能显示真实进程名。
- 不加 sudo 只能看到当前用户启动的进程,root 或其他用户的监听会漏掉
- 加 -P -n 能提速:-P 防止端口被转成服务名(比如 3306 → mysql),-n 跳过 DNS 反向解析,避免卡顿
- 示例:查 8080 端口 → sudo lsof -i :8080 -P -n
如果 lsof 没装,别急着装 net-tools
现代系统(Ubuntu 22.04+、CentOS 8+/RHEL 8+、Alpine 等)默认常不带 netstat,且 netstat 输出混 IPv6 地址(如 :::8080),grep 过滤容易出错;ss 虽快,但非 root 下 -p 常为空字段。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- Debian/Ubuntu:运行 sudo apt install lsof
- RHEL/CentOS 7:运行 sudo yum install lsof
- RHEL/CentOS 8+ 或 Fedora:运行 sudo dnf install lsof
- 装完立刻可用,无需重启服务
查到 PID 后,别直接 kill -9
先确认它到底是什么进程,避免误杀:
- 看完整命令行:ps -p PID -o pid,ppid,cmd,%mem,%cpu
- 如果是 docker-proxy 或 containerd,说明是容器映射的端口,得进容器查,宿主机上 kill 没用
- 同一端口可能被多个子进程共用(如 Node cluster),或 PID 已退出但 socket 还在 TIME_WAIT 状态
- 优先发 kill -15 PID(优雅终止),等几秒无响应再考虑 -9
其他可用但需注意局限的方法
sudo ss -tulnp | grep :端口 —— 速度快,适合快速扫一遍,但 Process 字段依赖内核配置和权限,某些环境下仍为空;sudo fuser 端口/tcp 输出极简(只给 PID),适合脚本调用,但不显示进程名;sudo netstat -tulnp | grep :端口 在老系统可用,新发行版常需额外安装 net-tools,且输出格式不如 lsof 直观。










