はじめに
WSL は、Windows 上で Linux 環境を扱える便利な仕組みです。
開発用途では Linux 系のコマンドやツールをそのまま使えますし、VSCode と組み合わせると、Windows を使いながら Linux 環境で作業できるのが助かります。
私も普段から VSCode で WSL に接続して作業しているのですが、あるとき VSCode の Connect to WSL に失敗する ようになりました。
最初は VSCode 側の問題かと思ったのですが、切り分けていくと wsl --shutdown すら効かない状態になっていました。
今回は、そのときに実際に試したことをまとめます。
きっかけ
今回の不具合に気づいたきっかけは、VSCode で WSL に接続できなかったことです。
普段どおり WSL に接続しようとしたのですが、うまくつながらず、最初は VSCode 側の一時的な不調かと思っていました。
ただ、WSL 自体の状態を確認するために PowerShell で以下を実行してみると、これも反応がありませんでした。
wsl --shutdown
wsl --shutdown は通常すぐに終了する認識だったため、この時点で VSCode ではなく WSL 側の問題 だと考えました。
まず試したこと
最初は、WSL 関連のサービスを再起動できないか確認しました。
Get-Service LxssManager
Restart-Service LxssManager
ただ、私の環境では LxssManager が見つかりませんでした。
Get-Service : サービス名 'LxssManager' のサービスが見つかりません。
以前は LxssManager という名前を見かけた記憶があったのですが、環境や WSL の導入形態によっては、別のサービス名になっている場合があるようです。
WslService を確認
次に、WslService という名前で存在していないか確認しました。
Get-Service WslService
Get-Service vmcompute
こちらは存在していたため、再起動を試しました。
Restart-Service WslService
Restart-Service vmcompute
ただ、これも正常に動作しませんでした。
WslService を停止できず、再起動に失敗しました。
表示された内容は以下の通りです。
Restart-Service : 次のエラーのため、サービス 'WSL Service (WslService)' を停止できません
この時点で、以下のことが分かりました。
- VSCode の Connect to WSL が失敗する
-
wsl --shutdownも効かない -
WslService自体は存在する - ただし停止できない
サービスが存在するのに停止できない 場合、Restart-Service だけでは復旧できないことがあります。
最終的に効いた対処
サービスの再起動で止められなかったため、wslservice.exe のプロセスを強制終了してみました。
taskkill /IM wslservice.exe /F
これは成功しました。
成功: プロセス "wslservice.exe" (PID xxxx) は強制終了されました。
その後、WSL の状態確認を行うと、今度は正常に応答しました。
wsl --status
結果は以下のように返ってきました。
既定のディストリビューション: Ubuntu
既定のバージョン: 2
少なくとも私のケースでは、wslservice.exe がハングしており、その影響で wsl --shutdown や VSCode からの接続にも支障が出ていた ようでした。
wsl --shutdown が効かないからといって、すぐに再インストールに進まなくてもよい場合があります。
まずは WSL サービス自体が固まっていないか を疑うと切り分けしやすいです。
今回やったことの流れ
今回の流れを順番にまとめると、以下の通りです。
1. VSCode の Connect to WSL に失敗した
最初の異変はここでした。
2. wsl --shutdown を試したが反応しなかった
VSCode ではなく、WSL 側の問題だと判断しました。
3. LxssManager を確認した
私の環境では存在しませんでした。
4. WslService を確認して再起動を試した
サービスは存在していましたが、停止できませんでした。
5. wslservice.exe を強制終了した
これで改善しました。
6. wsl --status で確認した
再び応答が返るようになりました。
先に結論だけ見たい人向け
今回のケースでは、最終的にこれで復旧しました。
taskkill /IM wslservice.exe /F
wsl --status
おわりに
今回は、最初は VSCode 側の問題かと思っていましたが、実際には WSL 側が固まっていた、という流れでした。
wsl --shutdown が効かないとかなり焦りますが、今回のように WSL サービスがハングしているだけ であれば、wslservice.exe を強制終了することで復旧することもあります。
もし同じように
- VSCode の Connect to WSL に失敗する
-
wsl --shutdownも返ってこない -
WslServiceの再起動もうまくいかない
という状況であれば、再インストールを検討する前に一度以下を試す価値はあると思います。
taskkill /IM wslservice.exe /F