查端口占用必须用精准命令:macos/linux执行lsof -ni :3000,windows powershell运行get-nettcpconnection -localport 3000获取owningprocess pid,再kill或taskkill终止;避免依赖任务管理器猜进程名。

查端口占用必须用精准命令,别靠任务管理器猜
任务管理器里一堆 node.exe,光看名字根本分不清哪个在占 3000 或 9229。直接查 PID 才可靠:
- macOS/Linux:在 VS Code 内置终端运行
lsof -ni :3000(把3000换成你报错的端口),-n跳过 DNS 解析,-i只筛网络连接 - Windows PowerShell:运行
Get-NetTCPConnection -LocalPort 3000,输出字段OwningProcess就是真实 PID,不用手动匹配 - 如果
lsof报 command not found,macOS 先跑xcode-select --install;Windows 别硬用 CMD 的netstat,它输出格式松散、易漏 PID
改 launch.json 的 port 字段只是治标,得避开默认端口区间
launch.json 里写死 "port": 9229 是冲突高发源头——Chrome DevTools、WebStorm、甚至其他 VS Code 窗口都可能抢这个端口。
ZenHeart zenlink 与 zenlink-mcp 为 OpenClaw,涵盖安装、MCP 注册、钩子接线、入站轮询及升级维护。
- 把调试端口改成
9300–9400这类冷门区间,比如"port": 9321 - 若配合
nodemon,确保runtimeArgs里的--inspect-brk和port值一致:["--inspect-brk=9321", "${workspaceFolder}/index.js"] - 别只改
port,还要检查address字段是否为"localhost"或"127.0.0.1";设成"0.0.0.0"可能引发 IPv6/IPv4 双栈监听冲突
Live Server 插件和调试器端口必须分开配,不能混用
改了 launch.json 的 port,对 Live Server 完全无效——它是独立插件,走另一套配置。
- Live Server:VS Code 设置里搜
liveServer.settings.port,填个空闲值如5501 - Remote-SSH 或 Codex 类扩展:它们的内置服务端口无法通过用户配置修改,只能杀进程释放,或提前在 SSH config 里加
"remote.SSH.defaultForwardedPorts": ["3001", "3002"] - 改完配置后,务必关掉所有已启动的调试会话和 Live Server 实例——旧进程不会自动 reload 新端口
防复发的关键不是杀进程,而是让代码自己优雅关口
每次手动 kill 或 taskkill 只是临时止血。真正容易被忽略的是:Node 进程退出时没主动关闭 server,导致端口卡在 TIME_WAIT 状态。
- 在入口文件里加
process.on('SIGINT', shutdown)和server.close(),确保 Ctrl+C 或调试器断开时释放监听套接字 - 避免在
package.json的 scripts 里硬编码端口,比如"start": "react-scripts start --port 3000"—— 改成环境变量驱动:"start": "PORT=3001 react-scripts start" - 调试时别同时跑
nodemon和 VS Code 调试器监听同一文件,这是最典型的EADDRINUSE来源










