最直接有效的方法是运行sudo lsof -i -p -n | grep listen,可一次性列出所有处于listen状态的tcp/udp端口及对应进程名、pid、绑定地址等完整信息,无需安装、结果精准、覆盖全面。

MacBook启动本地服务失败,提示“Address already in use”,说明有程序正在监听某个端口,但你不确定是哪个端口、被谁占用——这时需要一次性看清所有正在监听的网络端口及其对应进程,而不是逐个猜测排查。
用lsof一次性列出所有监听中的TCP/UDP端口
这一步最直接,能覆盖绝大多数开发场景下的端口监听情况,输出清晰、字段完整,且无需额外安装工具。
打开终端 → 输入命令:sudo lsof -i -P -n | grep LISTEN
按下回车后,系统会列出所有处于LISTEN状态的TCP和UDP连接。-P参数禁用端口号转服务名(比如不把80显示成http),-n跳过DNS解析,避免卡顿和混淆;sudo确保能读取所有用户进程的网络信息。
注意:若某行显示IPv6地址如*:8080 (LISTEN),说明该进程同时监听IPv4和IPv6;若只显示127.0.0.1:3000,则仅限本机访问。
用netstat扫描全部TCP监听端口
当lsof结果异常空或权限受限时,netstat可作为备用方案,它更底层,对内核网络栈状态反映更原始。
在终端中执行:sudo netstat -anvp tcp | grep LISTEN
这条命令会输出所有TCP协议的监听条目,包括本地地址、端口、PID和进程名。-v参数启用详细模式,-p要求显示PID(需sudo权限)。
如果看到类似127.0.0.1.5000这样的格式,说明端口在点号后——Mac的netstat默认用点分隔IP和端口,不是冒号。
图形化查看:用活动监视器定位高网络活跃进程
如果你不想看命令行滚动列表,而是想快速锁定可疑程序,活动监视器提供直观入口,尤其适合怀疑是某个GUI应用偷偷占了端口的情况。
第一步:打开“应用程序”→“实用工具”→“活动监视器”
第二步:点击顶部标签栏的“网络”选项卡 → 观察“接收字节”和“发送字节”排序后的前列进程
第三步:选中一个网络活动异常高的进程 → 点击右上角“i”图标 → 在弹出窗口中查看“打开的文件和端口”部分(需勾选“显示”→“打开的文件和端口”)
【必须勾选“打开的文件和端口”才能看到端口绑定详情,否则该区域为空】
验证某个端口是否真正在监听
方法一:用nc测试本地端口连通性
在终端输入:nc -zv 127.0.0.1 端口号(例如 nc -zv 127.0.0.1 3000)
若返回Connection succeeded!,说明端口确实在监听且可连接;若返回Connection refused,说明没进程监听,或防火墙拦截。
方法二:用lsof单独查一个端口确认
执行:lsof -i :端口号(例如 lsof -i :3000)
这条命令不加sudo也能查到当前用户启动的进程,适合快速验证自己启动的服务是否成功绑定。











