必须禁用系统休眠并屏蔽wsl2挂起响应:执行powercfg /hibernate off删除hiberfil.sys,配置wsl.conf启用systemd,关闭快速启动及休眠入口,注册表设hibernateenabledefault为0。

Windows 11 在系统休眠时会强制终止所有 WSL2 实例及其后台进程,导致正在运行的 Docker 容器、数据库服务、开发服务器等全部中断,且唤醒后无法自动恢复——这不是 WSL2 的 bug,而是 Windows 电源管理策略对虚拟机子系统的硬性约束。要彻底关闭这一特性,必须同时切断休眠能力本身与 WSL2 对休眠事件的响应链路。
先断根:彻底禁用系统休眠功能
WSL2 进程被休眠杀死的前提是系统能进入休眠状态。只要 hiberfil.sys 存在、内核休眠支持开启,Windows 就会在合盖、电源键触发或超时后强制冻结 WSL2 虚拟机。这一步不完成,后续所有操作都只是临时缓解。
按 Win + I 打开设置 → 左侧点“系统” → 右侧选“电源和电池” → 点击“屏幕、睡眠和休眠超时” → 将“已接通电源时关闭屏幕”“使用电池时关闭屏幕”“已接通电源时进入睡眠”“使用电池时进入睡眠”全部设为“从不”。
右键“开始”菜单 → 选择“终端(管理员)” → 输入 powercfg /hibernate off → 回车执行。该命令会立即删除 C:\hiberfil.sys 并关闭内核级休眠支持,【这是唯一能阻止 WSL2 被休眠杀死的根本操作】。
执行完成后,输入 powercfg /a 回车验证:若返回中明确出现“休眠未配置”,且无“待机(S4)”字样,即表示成功。
再断联:禁止 WSL2 响应系统挂起事件
即使休眠被禁用,部分 WSL2 发行版(尤其是启用了 systemd 的 Ubuntu/Debian)仍会监听 Windows 的 Suspend/Resume 信号并主动清理进程。需修改 WSL2 配置文件屏蔽该行为。
在 Windows 终端中运行:wsl -d Ubuntu -u root(将 Ubuntu 替换为你实际使用的发行版名称)。
执行 mkdir -p /etc/wsl.conf → 然后运行 echo -e "[boot]\ncommand = true\nsystemd = true" > /etc/wsl.conf(此配置确保 systemd 启动,避免 init 进程被误杀)。
退出 WSL2:输入 exit → 在 PowerShell 或 CMD 中运行 wsl --shutdown → 再次启动 WSL2 实例。此时 systemd 成为 PID 1,能接管并保护子进程免受 Windows 挂起信号干扰。
最后堵漏:移除休眠入口并禁用快速启动
方法一:控制面板路径
Win + R → 输入 control → 回车 → 右上角“查看方式”切为“大图标” → 点“电源选项” → 左侧点“选择电源按钮的功能” → 点“更改当前不可用的设置” → 取消勾选“休眠” → 点“保存更改”。
方法二:禁用快速启动(关键!)
在同一个“选择电源按钮的功能”页面中,取消勾选“启用快速启动(推荐)”。【快速启动本质是休眠的变体,它会让关机后仍保留内核状态,一旦触发唤醒逻辑,WSL2 仍可能被意外终止】。
方法三:注册表强制锁定休眠默认状态
Win + R → 输入 regedit → 导航至 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power → 右侧空白处右键 → 新建 → DWORD (32位) 值 → 命名为 HibernateEnableDefault → 双击将其数值数据设为 0。











