WSL2内核需手动更新,VSCode须在WSL中执行code .启动,终端应设为bash以确保Ctrl+C生效,WSL2服务需监听0.0.0.0并用localhost直连或查nameserver IP访问。

WSL2内核没更新导致wsl --list --verbose显示Stopped或启动失败
WSL2依赖独立的轻量级虚拟机内核,Windows 10/11默认不会自动更新它。如果wsl --list --verbose里状态是Stopped,或者wsl -d Ubuntu卡住、报错WslRegisterDistribution failed: 0x80370102,大概率是内核过旧或损坏。
手动下载并安装最新内核更新包是最稳妥的做法:
- 访问
https://aka.ms/wsl2kernel下载wsl_update_x64.msi - 以管理员身份运行安装(双击即可,无需命令行)
- 安装后重启终端,再执行
wsl --shutdown+wsl -d Ubuntu
别指望 Windows Update 自动推这个包——它常被归类为“可选更新”,且不触发强制安装。
VSCode里打开WSL文件夹后Remote-WSL插件没自动激活
VSCode必须通过code .在WSL终端中启动,才能进入真正的远程会话。直接在Windows资源管理器里右键“用Code打开”,哪怕路径是/home/xxx/project,也还是走Windows本地进程,Remote-WSL插件压根不介入。
正确姿势只有这一种:
- 先在WSL里cd到项目目录,比如
cd ~/myapp - 运行
code .(确保已安装code命令:执行sudo apt install code或按官方文档配置vscode-server) - VSCode窗口左下角出现绿色WSL图标,且终端提示符变成
username@hostname:~$,才算真正接入
常见错误是误以为“路径在WSL里=自动远程”,其实VSCode只认启动入口。Windows版Code和WSL版code命令是两套逻辑。
Ctrl+C在VSCode集成终端里不中断正在运行的Python脚本
这是WSL2+VSCode终端的典型信号传递问题:默认终端类型integratedTerminal有时无法把SIGINT准确转发给子进程,尤其对python main.py这类长期运行的脚本。
解决方法不是换Shell,而是改终端后端:
- 在VSCode设置里搜索
terminal.integrated.defaultProfile.linux - 把它设为
bash(而非默认的zsh或空值) - 重启集成终端,或执行
Ctrl+Shift+P → Terminal: Select Default Profile → bash
根本原因是WSL2的zsh在VSCode终端中对pty信号处理不够稳定;bash更保守,兼容性更好。别折腾stty或trap,这是环境层问题,不是代码层。
从Windows访问WSL2里的服务(如localhost:3000)失败
WSL2使用虚拟网络(vNIC),IP地址动态变化,且默认不开放端口映射。你在WSL里跑npx serve -s build,Windows浏览器打不开http://localhost:5000,不是防火墙问题,而是连接路径断了。
两个可靠方案,任选其一:
- 用
localhost直连:WSL2 0.67+已支持自动端口代理,只要服务监听0.0.0.0:3000(不是127.0.0.1:3000),Windows就能通过localhost:3000访问 - 查WSL2真实IP:运行
cat /etc/resolv.conf | grep nameserver | awk '{print $2}',得到类似172.28.16.1的地址,然后在Windows浏览器输入http://172.28.16.1:3000
别去改/etc/wsl.conf配静态IP——微软明确不推荐,容易引发DNS冲突。动态IP+localhost代理是当前最稳的组合。


















