“重新加载窗口”关不掉 Extension Host 进程,因其是独立 Node.js 子进程,加载语言服务后常驻后台;需手动终结整条进程树(Windows 任务管理器或 macOS/Linux 终端 kill -9),并彻底关闭窗口(Cmd+Q 或文件→关闭窗口),再命令行 code . 重启。

为什么“重新加载窗口”关不掉 Extension Host 进程
执行 Developer: Reload Window 只会重启渲染进程,Extension Host(即扩展宿主)的 Node.js 子进程仍常驻后台。它加载了 pylance、tsserver、eslint-server 等语言服务,一旦启动就不会随窗口重载而退出。你看到 CPU 占用没降,就是因为这些子进程还在跑。
怎么真正杀掉所有 VSCode 后台进程
必须手动终结整条进程树,不能只关前台窗口:
- Windows:打开任务管理器 → 「详细信息」页 → 按名称排序,结束所有含
Code.exe、Code Helper.exe(含 GPU/Renderer 后缀)、Code - Insiders.exe的进程 - macOS/Linux:终端运行
ps aux | grep -i "code\|codex\|pyright\|tsserver",对每个 PID 执行kill -9 [PID] - 验证是否清空:
ps aux | grep -v grep | grep -i code应无输出;Windows 下可再开任务管理器确认无残留
关完进程后必须彻底关闭并重开窗口
禁用扩展或改配置后不关窗口,旧进程不会释放。尤其 onStartup 类扩展(如 gitlens.gitlens、ms-python.python)会在启动瞬间拉起长期子进程。仅靠「关闭终端」或「关闭文件夹」无效:
- 菜单栏选「文件 → 关闭窗口」(不是「退出」),确保 Dock/任务栏图标也消失
- macOS 用户注意:右上角红点 × 不等于退出,需 Cmd+Q 或菜单退出
- 重开时建议用命令行启动:终端输入
code .,避免从 Dock 或快捷方式误启旧实例
容易被忽略的“假关闭”陷阱
你以为关干净了,其实还有三类残留在偷偷续命:
-
files.watcherExclude配置写错(比如写成"node_modules"而非"**/node_modules/**"),导致文件监听器持续满载,间接拖住 Extension Host - 用户级
settings.json里还留着"eslint.enable": true这类开关,即使插件已禁用,VSCode 仍会尝试加载服务 - Linux 用户要检查
/proc/sys/fs/inotify/max_user_watches,若低于524288,watcher 会频繁 fallback 到轮询,加重进程负担
真正干净的重启,是进程全无、窗口全关、配置无残留——少做一步,就可能让 Extension Host 在后台继续吃 CPU 一整天。


















