使用lsof -ti :端口号精准获取占用端口的pid列表,再通过kill -9 $(lsof -ti :端口号)强制终止所有相关进程,最后用lsof -i :端口号验证端口是否已释放。

Mac开发时遇到“Address already in use”错误,说明目标端口正被一个或多个进程监听,必须在终端中精准定位并全部终止这些进程,否则服务无法启动。
查出占用指定端口的所有进程PID
打开终端(Command + 空格 → 输入“终端” → 回车),输入:
lsof -ti :端口号
把“端口号”替换成你要处理的数字,例如 lsof -ti :3000。
这个命令只输出 PID 列表,每行一个数字,没有标题、没有多余字符,【-t 参数确保输出纯净可直接用于后续命令,避免空格或换行干扰】。如果返回为空,说明该端口当前未被任何进程监听。
注意:不要用 lsof -i :端口号 后再手动抄 PID——容易漏掉多行、误选 ESTABLISHED 连接行,-ti 是专为脚本化清理设计的安全组合。
用 kill -9 一次性终结所有匹配进程
将上一步查到的 PID 全部传给 kill -9 命令,执行:
kill -9 $(lsof -ti :端口号)
这行命令会自动展开括号内结果,等价于对每个 PID 执行一次 kill -9。比如查出 1234 和 5678 两个 PID,实际执行的就是 kill -9 1234 5678。
【该操作不可逆,进程立即终止且不执行任何清理逻辑,务必确认端口确实被误占且无重要数据待保存】。若提示 “No such process”,说明其中某些 PID 已自然退出,属于正常现象,不影响其余进程终止。
验证端口是否已释放
执行完上一步后,立刻运行:
lsof -i :端口号
如果终端回显为空,表示端口已彻底空闲;如果仍有输出,说明有新进程在你执行命令后立刻占用了该端口,需重新排查或检查服务启动逻辑是否重复触发。











