最直接有效的方式是使用 macos 自带的 lsof 命令,通过 sudo lsof -i -p -n | grep listen 查看所有监听端口及进程信息;-i 限定网络连接,-p 禁用端口名解析,-n 禁用 dns 反向解析,grep listen 过滤监听状态。

最直接有效的方式是使用 lsof 命令,它是 macOS 自带工具,无需安装,能同时显示监听端口、协议类型(TCP/UDP)、绑定地址(如 *:3000 或 127.0.0.1:8080)、进程名和 PID。
查看所有监听中的网络端口(含完整进程信息)
运行以下命令可列出全部处于 LISTEN 状态的 TCP/UDP 端口:
sudo lsof -i -P -n | grep LISTEN
其中:
-i 表示只显示网络连接;
-P 禁用端口号转服务名(避免把 3000 显示成 http-alt);
-n 禁用 DNS 反向解析(保持 IP 地址格式统一,加快响应);
grep LISTEN 过滤出真正监听状态的条目,排除已建立或关闭的连接。
只查 TCP 监听端口(适合 Web 开发、本地服务调试)
若你关注的是 HTTP、数据库等常见 TCP 服务,可用更精准的命令排除 UDP 干扰:
sudo lsof -iTCP -sTCP:LISTEN
该写法比 grep LISTEN 更可靠——它直接匹配内核 socket 的 TCP 状态字段,能捕获绑定到具体 IP(如 127.0.0.1:3000)而非通配符(*:3000)的服务。
快速检查某个端口是否被占用
当你已知端口号(比如 5000),想立刻确认并获取进程 ID:
-
lsof -P -n -i :5000—— 查看该端口所有连接(LISTEN 和 ESTABLISHED) -
sudo lsof -tiTCP -sTCP:LISTEN :5000—— 只输出 PID 数字,方便后续 kill
无输出表示该端口当前空闲;有输出则重点关注 COMMAND 和 PID 列。
按绑定地址进一步筛选
有些服务只监听本地回环,有些则对外网开放,可通过地址限定缩小范围:
- 只看监听在
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 - 只看 IPv4 监听(排除 IPv6):
sudo lsof -i4 -P -n | grep LISTEN
这些参数组合能帮你快速区分“仅本机可用”和“可能暴露在外网”的服务。











