我无法重新启动 wsl2,执行命令 wsl --shutdown 和其他任何 wsl 命令都会一直挂起。
同时,我发现服务LxssManager处于停止状态也会一直挂起。
我该如何重新启动wsl?
看起来 LxssManager 服务正在阻止 WSL 重新启动,我找到了一种方法来停止 LxssManager,然后就能正常地重新启动 WSL 了。
首先获取运行 LxssManager 的 svchost.exe 的 PID,在管理员模式下打开 cmd 并运行:
tasklist /svc /fi "imagename eq svchost.exe" | findstr LxssManager
获取返回的PID,以管理员身份运行任务管理器,在详细信息选项卡中搜索包含该PID的svchost.exe,右键单击它并选择“结束进程树”。
现在,您应该能够使用“wsl shutdown”和“wsl”正常重新启动wsl。
sc.exe queryex LxssManager
sc.exe stop LxssManager
sc.exe start LxssManager
sc.exe queryex LxssManager
顺便说一句,如果第二个queryex命令后LxssManager PID没有改变,则停止失败,您应该尝试在切换到管理员用户后运行命令。
另外,如果您仍然无法停止服务,应该使用任务管理器在“详细信息”选项卡中的“结束进程树”功能(使用queryex命令显示的PID)。确保您以管理员身份登录(比“以...身份运行”更强大)。
在 PowerShell 7 中,您可以使用以下语法:
Get-CimInstance -ClassName Win32_Service -Filter "Name='LxssManager'"
查找进程的PID。在我的情况下,返回对象的 State
是 Stop Pending
。使用返回的PID来终止LxssManager
:
Stop-Process -Id $(Get-CimInstance -ClassName Win32_Service -Filter "Name='LxssManager'").ProcessId -Force
这使得wsl.exe
在我的机器上恢复了响应。
针对wsl2,请尝试以下操作:
在具有管理员访问权限的CMD上执行:
taskkill /F /FI "IMAGENAME -eq wsl.exe"
taskkill /F /FI "IMAGENAME -eq wslhost.exe"
taskkill /F /FI "IMAGENAME -eq wslservice.exe"
ERROR: 无法识别搜索过滤器。
- codeananda
tasklist /svc /fi "imagename eq svchost.exe" | findstr LxssManager
意思是查找所有运行 LxssManager 的 svchost 进程。 - Peachyztasklist /svc /fi "services eq LxssManager"
。 - Laszlo