推荐优先使用 sudo ss -tulnp | grep ':端口号\>' 查pid(高效),或 sudo lsof -np -i :端口号(信息全),两者均需root权限;ss输出中users:(("proc",pid=xxx))提取pid,lsof输出中第二列即pid。

直接用 sudo ss -tulnp | grep :端口号 或 sudo lsof -i :端口号 就能快速拿到 PID,推荐优先用 ss(快)或 lsof(信息全),两者都需 root 权限才能显示进程名和 PID。
用 ss 命令查(推荐,高效)
ss 是 netstat 的现代替代品,执行快、资源占用低,尤其适合脚本或频繁排查。
- 查 TCP 监听端口(如 8080):
sudo ss -tulnp | grep ':8080\>'(\>防止匹配到 80801、80802 等) - 输出示例中关键字段是
users:(("java",pid=1234,fd=42))→ PID 就是 1234 - 若只想要纯数字 PID(方便后续操作),可加管道:
sudo ss -tulnp | awk '/:8080\>/ {for(i=1;i
用 lsof 命令查(信息完整)
lsof 能显示命令名、用户、文件描述符、协议类型等,适合需要进一步分析的场景。
- 基础用法:
sudo lsof -i :8080(注意冒号紧贴端口号,不能有空格) - 避免主机名和服务名解析(更快更稳定):
sudo lsof -nP -i :8080 - 输出中
PID列就是目标值,例如:java 1234 root 42u IPv6 12345 TCP *:8080 (LISTEN)→ PID = 1234
其他可用方式(按需选用)
某些环境可能没装 lsof 或 ss,或需兼容旧系统,这些方法仍有效:
-
sudo netstat -tulnp | grep ':8080\>':老系统常用,但需先安装net-tools(Ubuntu/Debian 用apt install net-tools) -
sudo fuser 8080/tcp:极简输出,只打印 PID 列表(如1234),适合配合kill快速清理 - 若端口是 UDP:
sudo lsof -iUDP:53或sudo ss -ulnp | grep ':53\>'(注意大小写和协议标识)
小提醒
所有命令都需要 sudo 权限,否则 PID 和进程名会显示为 - 或报权限错误;如果查不到结果,确认端口确实在监听(不是已关闭或处于 TIME_WAIT 状态),必要时加 -Pn 参数避免解析干扰。











