最直接有效的方式是使用lsof命令,它是macos自带工具,无需安装,能同时显示监听端口、协议类型、绑定地址、进程名和pid;推荐用sudo lsof -i -p -n | grep listen全局扫描,或lsof -itcp -stcp:listen精确筛选tcp监听,lsof -ti :3000可快速提取pid。
最直接有效的方式是用 sudo lsof -i -p -n | grep listen,它能一次性显示所有监听端口的协议、绑定地址、进程名和 pid,无需额外安装,结果清晰可靠。
查看全部监听端口(TCP/UDP)
在终端中运行:
sudo lsof -i -P -n | grep LISTEN
说明:
- -i 表示只筛选网络连接
- -P 禁用端口号转服务名(如不把 3000 显示成 http-alt)
- -n 禁用 DNS 反向解析(如不把 127.0.0.1 解析为 localhost)
- grep LISTEN 过滤出真正处于监听状态的条目,排除 ESTABLISHED、TIME_WAIT 等无关连接
输出中类似 *:3000 (LISTEN) 或 127.0.0.1:8080 (LISTEN) 的行,其 PID 列就是对应进程编号。
只查 TCP 监听端口(更精准)
开发时常用 Web 服务、数据库等基本都是 TCP,排除 UDP 干扰更干净:
sudo lsof -iTCP -sTCP:LISTEN
这个命令比用 grep LISTEN 更可靠,因为它是直接匹配 TCP 协议的状态字段,不会漏掉某些非标准格式的监听项。还能准确捕获绑定到具体 IP(如 127.0.0.1:3000)而非通配符(*:3000)的服务。
快速定位某个端口的占用进程
当你已知端口号(比如 5000),想跳过全量列表、直奔目标:
-
查详细信息:运行
sudo lsof -i :5000,会显示 COMMAND、PID、USER 和 NAME 四列 -
只提取 PID 数字(方便脚本或后续 kill):运行
lsof -ti :5000,输出就是纯数字,例如12345 -
限定为 TCP 监听态:加状态过滤更稳妥 ——
lsof -tiTCP -sTCP:LISTEN :5000
用 netstat 辅助验证(原生但功能有限)
netstat 是 macOS 自带命令,适合交叉核对或查看路由表,但不能直接显示进程名和 PID:
- 列出所有监听端口:
netstat -an | grep LISTEN - 仅显示 TCP/UDP 监听且用数字格式:
sudo netstat -tuln(加sudo后部分系统可能显示 Program Name,但不稳定) - 查路由表:
netstat -rn,用于确认默认网关和出口网卡
注意:macOS 原生 netstat 不支持 -p 参数,所以无法像 Linux 那样直接带出 PID;遇到“谁在用这个端口”问题,仍应以 lsof 为准。











