直接用系统命令查pid最有效:windows powershell运行get-nettcpconnection -localport 3000,macos/linux运行lsof -ni :3000,查到pid后用ps或tasklist确认进程名,常见为code helper、node或code.exe。

怎么用 VSCode 内置终端查谁占了 3000、5500 这类端口
VSCode 内置终端就是普通 shell,它不自带端口扫描能力,但能直接运行系统命令定位占用进程。关键不是“VSCode 能不能查”,而是你得在终端里敲对命令——而且得匹配你的操作系统。
常见错误是复制网上教程里的 netstat -ano | findstr :3000 就去 Windows CMD 里跑,结果没输出,以为没占;其实是因为没开管理员权限,或者用了旧版 CMD 没加载 netstat。更糟的是,在 macOS 上看到 command not found: lsof 就卡住,忘了先装工具。
- Windows PowerShell(推荐):
Get-NetTCPConnection -LocalPort 3000,输出直接带OwningProcess字段,就是 PID,不用再切任务管理器 - Windows CMD(需管理员):
netstat -ano | findstr :3000,注意结果里 PID 是十进制,得去任务管理器“详细信息”页手动开启“PID”列才能比对 - macOS/Linux:
lsof -ni :3000(-n跳 DNS 解析,-i只筛网络连接),如果报错,先运行xcode-select --install(macOS)或brew install lsof(Homebrew 用户)
别用 ps aux | grep node 全局扫——可能把其他项目里的 node 进程也列出来,误杀风险高。盯准报错里那个具体端口号,直查最稳。
查到 PID 后,怎么确认是不是 VSCode 自己的进程
很多“端口被占”根本不是外部服务干的,而是 VSCode 上次调试、Live Server 或 Remote-SSH 没退出干净,留了个 Code Helper、node 或 Code 进程挂着监听。这时候光看进程名容易误判,得靠 PID 对应上。
- macOS/Linux:
ps -p 1234 -o comm=(把1234换成你查到的 PID),输出如果是Code Helper、Electron或node,基本就是 VSCode 自家的 - Windows:
tasklist /fi "PID eq 1234",看Image Name列,常见是Code.exe、CodeHelper.exe、node.exe - 特别注意:VSCode 的 Live Server 插件启动后,进程名常显示为
http-server或空,但 PID 一定归属Code Helper类进程——别因为看不到名字就放过
如果查出来是 svchost.exe(Windows)或 launchd(macOS),别硬杀,换端口更安全。系统服务占的 80/443 端口,普通用户本来就没权限绑。
为什么改了 launch.json 的 port 还报 EADDRINUSE
因为 launch.json 里的 port 只控制 Node.js 调试器(比如 Chrome DevTools 协议端口),不影响前端开发服务器、Live Server、Remote-SSH 代理或项目脚手架自己起的服务。它们各管各的端口,互不买账。
- Live Server 插件走的是独立配置项:
liveServer.settings.port,必须在 VSCode 设置里搜这个 key 改,改完要点右下角“Go Live”重新触发 - React/Vue/Vite 项目本身默认监听 3000,改
launch.json完全无效;得在终端里加环境变量:PORT=3001 npm start,或改package.jsonscripts - Remote-SSH 报
36849被占,不是改launch.json能解决的,得检查是否多个 VSCode 窗口连同一台主机,或 Docker Desktop / JupyterLab 也在用这个端口
一个端口被占,背后可能是三四个不同模块在抢——别只盯着一个配置文件改,先用命令确认是谁在 listen,再找对应模块的配置入口。
杀进程时最容易漏掉的子进程树
直接 kill -9 1234 或 taskkill /f /pid 1234 看似干脆,但 Node.js 启动的子进程(比如 npm、yarn、Webpack 的 watcher)可能还在后台继续 bind 端口,几秒后又复现冲突。
- macOS/Linux:先
kill 1234(发 SIGTERM),等 2 秒无响应再kill -9 1234;想一次清干净,用killall -r "Code Helper|Code|Electron" - Windows:必须加
/t参数,taskkill /f /t /pid 1234才能顺带干掉所有子进程;单独/f很可能漏掉 npm 子线程 - 终极清理(VSCode 全局):
killall -r "Code Helper|Code|Electron"(macOS/Linux)或taskkill /f /t /im Code.exe && taskkill /f /t /im CodeHelper.exe(Windows)
杀完立刻验证:Get-NetTCPConnection -LocalPort 3000 或 lsof -i :3000 应该无输出。有输出,说明还有残留进程在监听,得继续追 PID。











