端口被占用时需用lsof -p -n -i :端口号查pid和command,再用netstat交叉验证,最后通过活动监视器或kill -9 pid强制终止进程。

Mac上启动本地服务时提示“Address already in use”,说明目标端口正被其他进程监听,必须立刻确认该端口是否真被占用、找出对应进程并强制终止,才能继续开发调试。
用lsof精准查指定端口是否被占用
按下 Command + 空格打开聚焦搜索 → 输入“终端”并回车启动。
输入命令:lsof -P -n -i :端口号,把“端口号”替换成你要检查的实际数字(例如 lsof -P -n -i :3000)。
这一步必须加【-P -n 参数】,否则终端会卡顿数秒等待DNS解析,还可能把3000显示成http-alt,导致你误判为其他服务。
若命令执行后无任何输出,说明该端口当前完全空闲;若有结果,重点关注 PID 和 COMMAND 两列——PID 是进程唯一编号,COMMAND 是程序名(比如 node、python、java)。
用netstat交叉验证监听状态
方法一:快速过滤目标端口
在终端中运行:netstat -an | grep LISTEN | grep :端口号,例如 netstat -an | grep LISTEN | grep :8080。
方法二:列出全部监听端口再人工筛选
执行:sudo netstat -anvp tcp | grep LISTEN,需要输密码,输出里找 Local Address 含 *:端口号 或 127.0.0.1:端口号 的行。
netstat 不直接显示进程名,但能确认端口确实在 LISTEN 状态——如果 lsof 没结果而 netstat 有,大概率是权限不足,此时补上 sudo 再试 lsof。
通过活动监视器图形化定位进程
第一步:打开“应用程序” → “实用工具” → “活动监视器”,或用聚焦搜索直接启动。
第二步:点顶部搜索框,粘贴刚才从 lsof 或 netstat 中得到的 PID 数字(比如 12345)。
第三步:搜索结果高亮后,选中该进程 → 点左上角红色 X 按钮 → 在弹窗中选“强制退出”。
必须勾选“打开的文件和端口”才能看到端口绑定详情,否则该区域为空。这个操作适合怀疑 GUI 应用偷偷占了端口的情况,比如 Electron 程序、VS Code 扩展。
用kill命令强制终止占用进程
① 在终端中输入:kill -9 PID,把 PID 替换为实际数值(例如 kill -9 12345)。
② 这一步操作不可逆,进程所有内存和临时文件立即丢弃,不会保存任何未提交数据。
③ 执行后,立刻再运行一遍 lsof -P -n -i :端口号,确认无输出——端口已释放成功。











