решение1
Вы не можете перезагрузить дистрибутив одной командой. Вы должны выключить и загрузить дистрибутив двумя командами. Если вы запуститеwsl.exe
вместо wsl
, то это работает как в WSL Bash, так и в CMD.
Посмотрите список дистрибутивов и их текущее состояние:
wsl.exe -l -v
Выключите все: Build 18917+
wsl.exe --shutdown
Завершить работу определенного дистрибутива: Windows 1903+
wsl.exe -t <DistroName>
Загрузите дистрибутив по умолчанию (отмечен значком *
):
wsl.exe
Загрузите определенный дистрибутив:
wsl.exe -d <DistroName>
Старые версии
# PowerShell (admin)
Restart-Service LxssManager
# or CMD (admin)
net stop LxssManager
net start LxssManager
решение2
В административной командной строке PowerShell:Restart-Service LxssManager
решение3
Начиная с Windows 10 версии 1803, закрытие всех окон терминала WSL не будет завершать фоновые процессы по умолчанию, если только файл не /var/run/reboot-required
присутствует. Этот файл будет автоматически создан apt в Ubuntu, когда обновление требует перезагрузки, но если вы хотите вручную перезагрузить подсистему, вы можете создать файл самостоятельно:
sudo touch /var/run/reboot-required
Я не тестировал это на других дистрибутивах, доступных в Microsoft Store. Альтернативное решение — убить все процессы самостоятельно:
sudo killall -r '.*'
решение4
Следующая команда позволяет выполнить завершение работы из WSL2 с помощью команды
wslreboot
(или любой другой пользовательской команды).
Технически, wslshutdown
будет более подходящим для кода ниже:
Создать псевдоним:
sudo nano ~/.bash_aliases
Добавить строку:
alias wslreboot='history -a && cmd.exe /C wsl --shutdown'
history -a
гарантирует, что история команд bash будет сохранена перед завершением работы.
Включить псевдоним:
Перезапустить WSL
cmd.exe /C wsl --shutdown
или введите
source .bash_aliases
Использовать
теперь вы можете напечатать
wslreboot
выключить
Я думаю, вы могли бы использовать вариацию вышеприведенного кода для запуска пакетного файла со строками:
wsl --shutdown
wsl
для правильного перезапуска.