コンソールでWSLを再起動する

コンソールでWSLを再起動する

WSLコンソールで現在のWSLインスタンスを再起動するにはどうすればよいですか?

一般的な「容疑者」は機能しません。

reboot
shutdown -r

次のメッセージで失敗します。

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

WSLを強制的に再起動する他の方法はありますか?

答え1

cmdWindows経由または次のコマンドを使用してpowershellこれを行う必要があります。

> wsl --shutdown

インスタンス数が多く、特定のインスタンスまたはディストリビューションを終了する必要がある場合は、次のものを使用できます。

> wsl -l -v

リリース名、ステータス(実行中または停止中)、およびwslバージョンを確認して使用してください。

> wsl -t NAME

答え2

以下は、LinuxのWindows 11でWSL2を使用している場合に適用されます。

sudo poweroff -f

これは、SystemDのようなものを実行しようとせずにLinuxカーネルを直接終了しますinit

時間がかかる場合がありますのでご注意ください(少なくとも8秒しかし、インスタンスが再起動されるまで1分間見ました。同時にインスタンスにアクセスしようとすると、次のことが観察されます(これもドイツ語のWindowsインストールから取得され、Windows端末もドイツ語に設定されています)。

Schwerwiegender Fehler
Error code: Wsl/Service/E_UNEXPECTED

[Verarbeitung des Prozesses mit Code 4294967295 (0xffffffff) beendet]

大丈夫です。ただ座って待ってからもう一度やり直してください。

気になるなら:

strace poweroff -f

どのように動作するかを示します。表示される最後の数行は次のとおりです。

sync()                                  = 0
reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_CAD_ON) = -1 EINVAL (Invalid argument)
writev(2, [{iov_base="Powering off.", iov_len=13}, {iov_base="\n", iov_len=1}], 2Powering off.
) = 14
reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_POWER_OFF) = ?
+++ exited with 0 +++

[Verarbeitung des Prozesses mit Code 1 (0x00000001) beendet]

答え3

まず、WSLでLinuxディストリビューションを実行するときは、実際のマシンや仮想マシンで実行するのとは異なることを理解することが重要です。実際にあなたが持っているのは、Dockerや他のほとんどのコンテナシステム(名前空間、cgroupなど)に似た技術を使用するコンテナです。

WSLディストリビューションを「終了」することは、Docker / Podman /その他のコンテナを「終了」したいのと同じです。 UbuntuがDockerで実行されている場合は、Ubuntu内で終了する必要はありませんが、次のいずれかの方法で終了できます。

  • docker stopコンテナ外でコマンドを実行する
  • または、コンテナ内で実行されているすべてのプロセスを終了します。

WSLも同じだ。あなたはできます:

  • ディストリビューションで実行されているすべてのプロセスを停止して対話型シェルを終了した場合、WSLは15秒後にデプロイメント自体を終了する必要があります。ただし、Docker Desktopはバックグラウンドプロセスが実行され続けるため、すべての展開が引き続き実行されることに注意してください。

  • 強制展開の終了。これは通常PowerShellまたはCMDを介して行われますが、wsl --terminate <distroname>次のこともできます。~へ展開用途:

    wsl.exe --terminate $WSL_DISTRO_NAME
    
  • WSLシステムを完全にシャットダウンしますwsl --shutdown。同様に、WSL内では拡張子を含む完全な実行可能ファイル名を使用する必要がありますwsl.exe --shutdown

または--terminate--shutdown展開を中止してください。これはいいえエレガントな終了。実行中のすべてのプロセスは、正常な信号に応答する機会なしに即座に終了します。

通常のシャットダウンのために(私のAUの回答からコピー)ここ)、Windows 11の最新のWSLバージョンによるとできるシステムの実行。 WSL2 で Systemd が開始したサービスは、次の状況で自動的にシャットダウンされます。他のプロセスはありません(デフォルトではSystemdで始まったことを除いて)すべてUbuntuで実行されます。

今回の生産中止はい美しい。 WSL2はSystemdと通信し(通常のSystemdシグナリング動作によって)その下で実行されているすべてのサービスを正常に停止します。

WSLを同時に実行するには、バックグラウンドで追加のプロセス(「対話型」起動)を実行する必要があるため、これは必ずしも最適ではありません。バラよりこの回答これを行う方法の解決策です。私が言及したようなものを使用している場合は、プロセスを停止しkeychainkeychain -k all)Ubuntuでシェルを終了すると、約15秒以内にWSL2がSystemdに「正常終了」シグナルを送信する必要があります。

関連情報