直接查pid杀进程树最稳,但须分步软杀再硬杀并清子进程;查端口用lsof -ni(macos/linux)、get-nettcpconnection(windows powershell)或netstat(cmd);改端口需对症:live server改liveserver.settings.port,调试改launch.json或环境变量port,脚手架项目用环境变量启动。

直接查 PID 杀进程树,比重启 VS Code 或改代码更稳;但杀错进程或漏子进程,反而让端口卡得更死。
查谁在占 3000/5500/9229 这些端口:用对命令,别被 DNS 卡住
VS Code 报 EADDRINUSE,说明系统网络栈里已有进程绑定了你要的端口——不是 VS Code 本身的问题,而是残留进程没退干净。
- macOS/Linux:在 VS Code 内置终端(
Ctrl + `)运行lsof -ni :3000(把3000换成你实际报错的端口号;-n跳过 DNS 解析,-i只筛网络连接) - Windows PowerShell:直接跑
Get-NetTCPConnection -LocalPort 3000,输出里OwningProcess字段就是真实 PID,不用转换、不卡顿 - Windows CMD:用
netstat -ano | findstr :3000,注意输出中 PID 是十进制,得去任务管理器“详细信息”页开启“PID”列才能匹配
如果 lsof 报 command not found,macOS 先运行 xcode-select --install 或 brew install lsof;Windows 上若 netstat 不可用,优先换 PowerShell 命令。
kill -9 和 taskkill /f /pid 是最危险的起点
查到 PID 后,别立刻硬杀。Node 服务(比如 Live Server、React dev server)常拉起 npm/yarn/子线程,只杀主进程,子进程大概率继续占端口或锁文件。
- macOS/Linux:先
kill 1234(发SIGTERM),等 2 秒无响应再kill -9 1234 - Windows:必须加
/t参数,taskkill /f /t /pid 1234,否则子进程几乎必漏 - 更彻底清理 VS Code 自家进程:
killall -r "Code Helper|Code|Electron"(macOS/Linux),或taskkill /f /t /im Code.exe && taskkill /f /t /im CodeHelper.exe(Windows)
杀完立刻验证:lsof -i :3000 或 Get-NetTCPConnection -LocalPort 3000 应该无输出。有输出,说明还有漏网之鱼。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
改端口要对症下药:liveServer.settings.port ≠ launch.json.port ≠ PORT 环境变量
光改 launch.json 的 port 字段,对 Live Server 无效;关掉所有调试会话再改,也未必解决 Codex 登录服务的 1455 端口冲突。
-
Live Server 插件:在 VS Code 设置(
Cmd + ,或Ctrl + ,)里搜liveServer.settings.port,填个空闲端口如5501 -
Node.js 调试:在项目根目录
.vscode/launch.json中确认port字段没硬编码成9229,改成9230或更高;也可设为"port": "${env:PORT}" -
前端脚手架(如 create-react-app、Vite):它们根本不读 VS Code 配置,得靠环境变量——启动时加
PORT=3001 npm start或npm start -- --port 3001
改完记得关掉已打开的调试会话再重试,旧进程不会自动 reload 配置。
防复发的关键不在“杀”,而在“不绑定”和“优雅退出”
很多项目在 package.json 的 scripts 里写死 react-scripts start --port 3000,下次开新终端又撞上。真正省心的做法是让端口“动态可选”。
- 代码里监听逻辑改为
app.listen(process.env.PORT || 3000) - 禁用 VS Code 的自动端口转发(尤其 Remote-SSH 场景),在设置里关掉
remote.SSH.enableRemoteCommand类选项 - 给 Node 服务加优雅关闭逻辑:监听
process.on('SIGINT', () => server.close(...)),确保每次 Ctrl+C 都释放套接字 - 避免监听
::(IPv6)和127.0.0.1(IPv4)混用——看似不同地址,端口实际共享
复杂点在于:同一个端口可能被多个进程以不同协议(IPv4/IPv6)、不同用户权限(root/non-root)、不同生命周期(前台/后台)同时占用;容易被忽略的是,localhost 绑定失败时,错误日志里显示的地址(如 :::3000)和你手动查的 127.0.0.1:3000 并不等价。










