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