WSL2の一部or全ディストリを終了・再起動する方法
WSL2(Windows Subsystem for Linux)でいろいろソフトを正しく入れたはずなのに、なぜか動かない、ということがあります。また、vmmemというWSL2関連のプロセス(厳密に言うとHyper-V関連のプロセス)が、CPUやメモリなどのリソースを食いつぶしてしまうことがあります。
そんなときは、WSL2の再起動を試してみてください。この記事では、Windowsは起動したまま、WSL2環境の全ディストリビューションor一部のディストリビューションを終了・再起動する方法をまとめました。
WSL2の終了のしかた
特定のディストリを終了するには
WSL2で動いているディストリビューションは、wsl -t <ディストリ名>
で終了することができます。
実際に試してみます。まず、wsl -l -v
で、どのディストリビューションが動いているか確認してみます。
PS C:\> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Running 2
Ubuntu-18.04 Stopped 2
docker-desktop-data Running 2
Ubuntu Running 2
docker-desktop Running 2
今回は、Ubuntu 20.04を終了してみます。ディストリ名にUbuntu-20.04を指定して、wsl -t Ubuntu-20.04
を実行すると、Ubuntu 20.04だけ終了できます。
PS C:\> wsl -t Ubuntu-20.04
何も表示されずプロンプトが帰ってきますが、もう一度ディストリビューションのリストを表示してみます。
PS C:\> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Stopped 2
Ubuntu-18.04 Stopped 2
docker-desktop-data Running 2
Ubuntu Running 2
docker-desktop Running 2
Ubuntu-20.04がStoppedになって、終了したことが分かりました。
何らか、Ubuntu 20.04でソフトを実行していた場合は、強制終了されます。下の右図は、Ubuntu 20.04のBashを起動していたところですが、その状態で左図のように終了コマンドを打つと、Bashも終了します。(Bashのヒストリーが保存されずに終了しますので、Ubuntuが動いたまま終了コマンドを打つのはおすすめしません)
ちなみに、終了するコマンドの-tは、–terminateの短縮オプションです。従って、終了するコマンドはwsl --terminate Ubuntu-20.04
としても同じ動きになります。
すべてのディストリを終了するには
上記では、特定のディストリビューションを指定して終了しましたが、すべてのディストリビューションを終了することもできます。それには、wsl --shutdown
を実行します。
例えば、下図のようにUbuntu 20.04とDockerが動いている状態だとします。
この状態でwsl --shutdown
を実行すれば、下図のようにUbuntu 20.04もDockerも終了します。
すべてのディストリビューションがStoppedになっていることが分かります。
UbuntuなどのLinuxディストリビューションだけでなく、WSL2バックエンドなDocker Desktopも落ちてしまいますので、Dockerも使っている人は気をつけてください。Docker Dashboardを見ていても違いが現れませんが、タスクバーのアイコンにマウスを乗せると「Docker has stopped」となって、コンテナのないクジラマークになっていると思います。
WSL2を再起動するには
再起動は、特に明示的に指定する必要はありません。
Windows Terminalで新規のUbuntuタブを開く、Ubuntu2004.exeを実行する、スタートメニューからUbuntu 20.04を選択する、など、通常通りUbuntuを起動すればOKです。
Dockerについては、タスクバーのDockerアイコンを右クリックしてRestartを選択すれば起動します。
おまけ
Ubuntu側から終了する
上記のwslコマンドは、組み込みコマンドではなく、wsl.exeという外部コマンドです。
末尾の.exeをちゃんと入力すれば、Ubuntu環境からでもパスの通ったWindows用exeファイルを実行できますので、Ubuntu側から終了コマンドを打つこともできます。
username@z390:~$ wsl.exe -t Ubuntu-20.04
それ以降、何もできなくなるので、特にメリットはありません。
以前の情報(WSLサービスの終了)
ネットで調べると、以前はWindows側からWSL関連のサービスを終了する、という方法が紹介されていました。管理者権限でnet stop LxssManager
を実行すると、WSLサービスを終了できます。イメージ的には、wsl --shutdown
と似た動きです。
PS C:\WINDOWS\system32> net stop LxssManager
LxssManager サービスを停止中です.
LxssManager サービスは正常に停止されました。
こちらの記事もどうぞ
当ブログでは、他にもWSL2関連の記事を公開しています。良ければ、これらもご覧ください。
ディスカッション
コメント一覧
まだ、コメントがありません