最直接可靠的方式是使用 sudo lsof -i -P -n | grep LISTEN,可完整列出所有监听中的 TCP/UDP 端口及对应进程名和 PID;其中 sudo 保证权限,-P 和 -n 分别禁用端口与主机名解析以提升准确性和速度。
在 macos 终端中,获取当前所有网络监听端口最直接、可靠的方式是使用 lsof 命令(list open files),因为 macos 默认不带 netstat -tuln 的完整支持(尤其对 ipv6 和监听状态识别较弱),而 lsof 能准确列出处于 listen 状态的 socket。
查看所有监听中的 TCP/UDP 端口(推荐)
运行以下命令即可列出所有正在监听的网络端口(含协议、端口号、进程名和 PID):
sudo lsof -i -P -n | grep LISTEN
说明:
-
sudo:必要,否则可能看不到其他用户或系统进程(如 root)监听的端口; -
-i:仅显示网络相关文件(sockets); -
-P:禁用端口名解析(显示数字端口,如80而非http),避免 DNS 查询延迟; -
-n:禁用主机名解析(显示 IP 地址而非域名),提升速度并避免阻塞; -
grep LISTEN:过滤出监听状态(LISTEN是 macOS 下 lsof 对监听 socket 的标准标记)。
按协议或地址进一步筛选
如需聚焦特定类型,可加条件:
- 只看 IPv4 监听端口:
sudo lsof -i4 -P -n | grep LISTEN - 只看 TCP 监听端口:
sudo lsof -iTCP -P -n | grep LISTEN - 只看监听在
127.0.0.1(本地回环)的端口:sudo lsof -iTCP@127.0.0.1 -P -n | grep LISTEN - 查看监听在
0.0.0.0(所有 IPv4 接口)的端口:sudo lsof -iTCP@0.0.0.0 -P -n | grep LISTEN
替代方案:使用 netstat(有限支持)
macOS 的 netstat 功能较精简,无法直接显示监听端口归属进程,但可辅助验证:
-
netstat -anv | grep '\.LISTEN':列出所有监听 socket(含本地地址、端口、状态),但无进程信息; -
sudo netstat -anv | grep -E 'tcp.*LISTEN|udp' | head -20:快速浏览前 20 行监听项。
⚠️ 注意:macOS 的 netstat 不支持 -tuln 这类 Linux 常用组合参数,且不显示 PID/程序名,实用性低于 lsof。
快速定位某端口被谁占用
若已知端口号(如 3000),可反向查进程:
-
sudo lsof -i :3000(自动包含 LISTEN 和 ESTABLISHED 连接) -
sudo lsof -iTCP:3000 -sTCP:LISTEN(精确匹配 TCP LISTEN 状态)
输出中重点关注 COMMAND(进程名)和 PID 列,便于进一步排查或终止进程。
不复杂但容易忽略 sudo 权限和 -P/-n 参数——缺一可能导致结果不全、卡顿或难以解读。日常诊断建议以 sudo lsof -i -P -n | grep LISTEN 为默认起点。











