Перезапустите Ubuntu в Windows
Обновлено: 21.11.2024
Подсистема Windows Linux — это дополнительная функция Windows 10, которая позволяет пользователям запускать среду Linux непосредственно в Windows без какой-либо виртуальной машины. Пользователи могут легко включить эту службу с панели управления, а после этого, установив приложение Linux из магазина Microsoft, могут легко запускать команды Linux. (См. Как включить WSL и установить Ubuntu).
Поскольку приложения среды Linux, такие как Ubuntu, Debian, OpenSuse или Kali, не поддерживают Systemd, который предоставляет основные строительные блоки для операционной системы Linux, мы не можем использовать перезагрузку или использовать команды systemctl для управления службами systemd. . Итак, в таком случае, если мы хотим перезапустить подсистему Windows для службы Linux Lxssmanager, что делать? Здесь, в этой статье, вы найдете простое решение для этого.
Перезапустите WSL 1 или 2 в Windows 11 или 10 с помощью приведенной ниже команды…
Для WSL2 рекомендуется использовать эту команду Powershell. Щелкните правой кнопкой мыши кнопку «Пуск» в Windows и выберите «Powershell (администратор)» или «Терминал Windows (администратор)». Там введите приведенную ниже команду:
Теперь снова откройте свои приложения WSL, такие как ubuntu или любые другие, и все начнется снова.
Способ 1. Перезапустите службу Lxssmanager
Способ 2: Powershell для перезапуска LxssManager
Если вы не хотите использовать описанный выше шаг, просто используйте приведенную ниже команду в PowerShell от имени администратора.
<р>1. Щелкните правой кнопкой мыши кнопку "Пуск" в Windows 10. <р>2. Выберите Windows PowerShell (администратор)<р>3. Введите приведенную ниже команду и нажмите кнопку Enter.
Как только вы используете приведенную выше команду, она перезапускает службу Lxssmanager в службах Windows 10 для дальнейшего перезапуска подсистемы Windows для Linux.
Можно ли перезагрузить подсистему Ubuntu без перезагрузки моей системы?
Я пытался использовать команду выключения после установки некоторых обновлений, но, похоже, здесь это не вариант.
8 ответов 8
Завершить работу определенного дистрибутива: Windows 1903+
Старые версии
net работал в cmd (с админом). Только что проверил, что мой bat-файл с sc не работает в ОС Windows Build 1809.
Я использую новейшую программу предварительной оценки Windows с WSL 2 и пытался использовать такие команды, как C:\Users\xxx>wsl -l -v, показывая, что три из них — «Ubuntu», «docker-desktop» и «docker-desktop». -data" Как и в моем случае, также работает новейший докер, поэтому wsl -shutdown работает, но он также закрывает мою среду докера. После проб и ошибок я обнаружил, что wsl -t "Ubuntu" работает, но иногда это требует времени или не надежен? Однажды это сработало, когда я запустил командную оболочку с правами администратора.
По административной подсказке PowerShell: Restart-Service LxssManager
Мне нравится. Легко запоминается, достаточно хорошо автозаполняется с помощью табуляции. Забавно видеть, насколько хорошо Windows с самого начала отладила свою сервисную модель.
Начиная с Windows 10 версии 1803, закрытие всех окон терминала WSL по умолчанию не останавливает фоновые процессы, если только не присутствует файл /var/run/reboot-required. Этот файл будет автоматически создан apt в Ubuntu, когда для обновления потребуется перезагрузка, но если вы хотите вручную перезагрузить подсистему, вы можете создать файл самостоятельно:
Я не проверял это на других дистрибутивах, доступных в Microsoft Store. Альтернативное решение — убить все процессы самостоятельно:
@Louis Я вижу, вы уже приняли это, но вы можете выполнить sudo touch /var/run/reboot-required . На самом деле кажется, что наличие файла заставляет WSL убивать все фоновые процессы и отключать подсистему, когда все окна терминала закрыты, поэтому вы также можете злоупотреблять этим.
Нажатие кнопки «Требуется перезагрузка» (и закрытие всех терминалов) мне ничего не дало. В конце концов, я просто сделал wsl --shutdown и wsl -d (пример: wsl -d Ubuntu ; чтобы получить список, используйте wsl -l ).
Просто откройте окно cmd от имени администратора и выполните эти команды, чтобы перезапустить его.
Не работает.остается в состоянии «остановка». когда я пытаюсь запустить его снова, я получаю сообщение «Служба запускается или останавливается. Повторите попытку позже». никогда не заканчивается. Всегда зависает после того, как я запускаю команду rsync из пакета, например «bash -c 'rsync. '». Это кошмар.
Простой выход из оболочки с выходом и повторным открытием, кажется, помогает. Оболочку необходимо запускать от имени администратора.
Вот почему я сказал "уже". Информация о том, что этот пост устарел, важна, поэтому другим людям, у которых есть проблема прямо сейчас, не нужно пробовать это, чтобы узнать, что это не работает. Я не уверен, как здесь обстоят дела, но на Stackoverflow ответ должен помочь не только тому, кто задал вопрос, но и всем остальным, кто ищет решения той же проблемы.
У меня работало на 1909 (18363). Так что ответ по-прежнему актуален. Убедитесь, что вы запускаете его с повышенными привилегиями.
Следующее позволяет завершить работу из WSL2 с помощью команды wslreboot (или любой пользовательской команды).
Технически wslshutdown больше подходит для приведенного ниже кода:
Создать псевдоним:
Добавить строку:
history -a обеспечивает сохранение истории команд bash перед завершением работы.
Включить псевдоним:
теперь вы можете печатать
Я думаю, вы могли бы использовать вариант вышеизложенного для запуска пакетного файла со строками:
для правильного перезапуска.
Я создал файл *.bat, и при его запуске происходит перезагрузка в течение 10 секунд. (Я поражен тем, как быстро все перезагружается. И, пожалуйста, сообщите, не приведет ли мой подход к серьезным проблемам в долгосрочной перспективе.)
Поместите следующие две строки в файл WSL_reboot.bat и запускайте его каждый раз, когда вам нужно перезагрузить WSL в Windows 10.
Примечание к обновлению: судя по моему недавнему «обновлению» ОС Windows, сборка 1809 больше не поддерживает команду sc.
Примечание: необходимо перезагрузить «ядро» WSL, когда он/она форматирует буквенный диск через проводник Windows. Однако не совсем решил побочный продукт, когда команда ls получит следующую ошибку. Похожие посты из WSL@Github; Связанный пост из стека. Сброшу ссылку, если мне удастся решить проблему с побочным продуктом.
Иногда WSL зависает в Windows 10. Просто зависает при открытии "Ubuntu" bash. Есть ли способ перезапустить WSL без перезагрузки Windows?
Примечание для будущих читателей: я часто сталкиваюсь с этой проблемой после подключения VS Code к WSL и последующего выключения компьютера без отключения VS Code. Но все же иногда проблема не возникает даже при таких обстоятельствах.
Еще один комментарий: иногда wsl зависает так, что даже привилегии администратора и такие вещи, как Get-Service LxssManager | Restart-Service или net stop LxssManager не работает. Возможно, перезагрузка компьютера — единственный ответ.
17 ответов 17
Я считаю, что сегодня наиболее эффективным способом для WSL2 является Cmd Prompt/PowerShell:
Чтобы расширить ответ Кева, необходимо перезапустить службу LxssManager. Это можно сделать, открыв Диспетчер задач с помощью CTRL SHIFT ESC , перейдя на вкладку Службы, найдя службу LxssManager, щелкнув правой кнопкой мыши и выбрав Перезагрузить .
Вы можете завершить работу Ubuntu с помощью wslconfig (в командной строке Windows или PowerShell):
и он запустится автоматически при следующем открытии оболочки.
@LachezarRaychev, вы должны ввести указанную выше команду в командной строке Windows. Вы можете ввести «wslconfig /L», чтобы получить список всех зарегистрированных дистрибутивов, взять оттуда имя дистрибутива, а затем использовать «wslconfig /t»
Спасибо, сработало! В моем случае мне просто пришлось сменить Ubuntu на Ubuntu-20.04, так как мой дистрибутив так называется. Я обнаружил это, запустив wslconfig /l, чтобы увидеть доступные дистрибутивы.
Откройте powershell с правами администратора и введите следующую команду, чтобы перезапустить lxxsManger:
перейдите в настройки Windows -> Приложения и функции -> выберите Ubuntu, которую вы установили -> нажмите Дополнительные параметры (может потребоваться немного подождать) -> Завершить
Предположим, что имя дистрибутива wsl — Ubuntu .
Вы можете использовать команду wsl в командной строке (cmd), чтобы узнать имена дистрибутивов и завершить/выключить/перезапустить конкретный дистрибутив.
Перезапустить в том смысле, что вы закрываете свой дистрибутив wsl и запускаете его снова.
- Открыть командную строку.
- Используйте wsl -l или wsl --list, чтобы перечислить/показать все установленные дистрибутивы. Это даст вам такой вывод. (По умолчанию) не является частью имени, а просто маркером. ол>
- Завершите/отключите нужный дистрибутив, используя wsl -t или wsl --terminate, как
- В меню "Пуск" найдите "Включение или отключение компонентов Windows"
- Снимите флажок "Подсистема Windows для Linux", сохраните изменения и перезагрузите компьютер.
- Проверьте "Подсистема Windows для Linux", сохраните изменения и перезагрузите компьютер.
- Запустите WSL Ubuntu
- В PowerShell или CMD запустите wsl -l -v . Экземпляр «Ubuntu» будет отображаться как «Выполняется».
- В вашей оболочке (скорее всего, Bash) просто нажмите Ctrl + D.
- Быстро запустите wsl -l -v еще раз, и экземпляр Ubuntu, скорее всего, по-прежнему будет отображаться как "Выполняется"
- Подождите 10–20 секунд, снова запустите wsl -l -v, и экземпляр Ubuntu, скорее всего, будет отображаться как "Остановлен"
и он запустится автоматически при следующем открытии.
отключить Windows-сервис Lxss-Manager
В командной строке Windows введите wslconfig /L, чтобы просмотреть список зарегистрированных дистрибутивов.
Теперь введите wslconfig /t
После этого вы увидите, что экземпляр Ubuntu завершает работу.
Надеюсь, это поможет.
Попробуйте выполнить следующие действия:
Теперь ваш WSL должен работать.
Обновление (23.08.21): В качестве дополнительного замечания я бы рекомендовал отключить WSL от VS Code перед закрытием VS Code. Хотя это немного утомительно, из моего личного опыта я обнаружил, что выполнение этого дополнительного шага снижает вероятность возникновения проблемы с зависанием.
Хотя другие решения тоже работают, мне нравится эта краткая команда для Windows PowerShell или cmd:
Чтобы узнать, какие дистрибутивы установлены, можно запустить wsl -l .
Мне помогло запустить диспетчер задач с правами администратора и включить командную строку в столбце «Процессы», щелкнув правой кнопкой мыши любой из существующих столбцов. Затем найдите Service Host, перед которым есть пустая строка. Разверните его и посмотрите, содержит ли он LxssManager. Если это так, завершите его, щелкнув правой кнопкой мыши и щелкнув по завершению задачи. Затем запустите WSL, и он заработает.
Вы также можете найти правильный процесс, сопоставив столбец "PID" (идентификатор процесса) на вкладке "Службы".
Важное примечание. Не забудьте ограничить использование аппаратных ресурсов. Решение:
Если wsl уже установлен, в PowerShell от имени администратора:
В основной папке пользователя создайте файл .configwsl:
добавьте следующее:
Это очень распространенная проблема среди пользователей Wsl. Первый и самый простой способ — запустить wsl —-shutdown. Если у вас несколько машин Wsl, запустите wsl —-shutdown Ubuntu (запустите эти команды в административной командной строке или Powershell) или перейдите в «Настройки Windows» -> «Приложения и функции» -> «Ubuntu». -> Дополнительные параметры и нажмите «Завершить», как здесь. Дополнительные настройки Ubuntu Wsl Или перейдите в «Администрирование / Обычная командная строка» или «Powershell» и введите Wsl. Вы перейдете к своей машине Wsl по умолчанию. Если вы хотите перейти на другую машину Wsl, вы можете изменить машину Wsl по умолчанию. Чтобы узнать, какой компьютер Wsl используется по умолчанию, откройте командную строку администратора и введите здесь описание образа. Измените его, введя wsl --setdefault или wsl -s Замените имя дистрибутива на свой дистрибутив
Вот мой вариант решения проблемы.
После запуска WSL это выглядело как изображение в вопросе. Ничего не мог сделать, и это никогда не менялось даже через полчаса. Перезагрузка не помогла.
Ответы, в которых говорится об использовании вкладки «Диспетчер задач — Службы» для просмотра LxssManager, привели меня в правильном направлении, но не решили проблему.
При дальнейшем чтении решение состоит в том, чтобы убить процесс.
а. Чтобы получить идентификатор процесса (PID) из командной строки Windows с правами администратора, запустите
б. Используя диспетчер задач - вкладка «Подробности», найдите PID, щелкните правой кнопкой мыши и выберите «Завершить дерево процессов».
Означает ли это, что я не могу просто выключить машину, так как она находится под WSL?
Мне нужно просто нажимать X каждый раз, когда я хочу выйти?
У меня установлены последние обновления для Windows и Ubuntu.
Я попытался применить все предложения, представленные в ответах, от wsl -l -v до wsl --shutdown до net stop LxssManager, и все они потерпели неудачу. Последнее закончилось тем, что «служба запускается или останавливается» — цель этого комментария — указать, что на этот вопрос все еще нет полного ответа.
5 ответов 5
Я знаю, что это старо, но только что обнаружил, что вы можете сделать это через powershell
выведет что-то вроде
или прекратить все
надеюсь, это поможет!
Иногда кажется, что wsl --shutdown не работает, например, выполнение следующих команд:
в результате некоторые контейнеры все еще работают:
Оказывается, экземпляры WSL автоматически запускаются, когда вы пытаетесь получить доступ к дискам WSL. В моем случае \\wsl$\Ubuntu-20.04\workspace была открыта в среде IDE, что приводило к перезапуску экземпляра сразу после выключения. После того, как я закрыл IDE, я смог корректно завершить работу WSL.
На самом деле это очень удобная функция, мне не нужно вручную запускать WSL, я просто открываю свою IDE, и она находит нужный диск.
Здесь есть несколько хороших ответов, и мне не хочется добавлять еще один, но я думаю, что все они упускают что-то довольно простое — экземпляры WSL будут автоматически завершаться, когда процессы не запущены.
Должен ли я просто нажимать X каждый раз, когда хочу выйти?
Вы можете, если хотите. Когда окно терминала закрывается, оболочка и все запущенные в ней процессы также закрываются. Через несколько секунд, если ни один процесс не запущен, WSL автоматически завершит работу экземпляра.
Но вы можете сделать то же самое, просто выйдя из оболочки (при условии, что фоновые процессы запущены). Либо введите exit Enter, либо, в большинстве случаев, Ctrl + D, чтобы выйти из оболочки. Опять же, через несколько секунд, если в экземпляре не запущены другие процессы, WSL автоматически завершит его.
Вы можете увидеть это в действии, выполнив что-то простое, например:
Если это не так, возможно, что-то еще работает. Вы можете проверить это с помощью wsl -e ps aux (опять же, из PowerShell или CMD). Если больше ничего не запущено, вы увидите два процесса инициализации и только процесс ps:
Если появится что-то еще, вероятно, WSL не остановит экземпляр автоматически.
В этом случае отличный ответ Пабло вступает в игру. Вы можете принудительно завершить экземпляр с помощью wsl --terminate Ubuntu (или как там называется ваш дистрибутив). Все процессы внутри экземпляра будут остановлены.
Или (также описано Пабло) вы можете отключить всю систему WSL с помощью wsl --shutdown . При этом отключаются все экземпляры (и запущенные в них процессы), а также сетевая система и взаимодействие. Вы заметите немного большую задержку при запуске нового экземпляра WSL после --shutdown .
Так почему же обычные команды перезагрузки/выключения не работают? Две причины. Во-первых, как рассказал Бенгт, WSL в настоящее время не поддерживает systemd, и Ubuntu просто связывает эти две устаревшие команды с /usr/bin/systemctl (утилита управления systemd). Вы можете увидеть это с помощью ls -l /usr/sbin .
Но даже если бы это были устаревшие команды, напрямую вызывающие API завершения работы Linux, это не сработало бы. Microsoft обычно не подключает API, которые напрямую взаимодействуют с оборудованием, вместо этого предоставляя интерфейсы виртуализации там, где это необходимо. Но в случае запуска и остановки экземпляра WSL это настолько «легковесно» (как обсуждалось выше), что для этого нет никакой реальной причины.
Если вы используете WSL, вы можете использовать пару команд, чтобы закрыть один или все дистрибутивы Linux вручную, и вот как это сделать.
Несмотря на то, что подсистема Windows для Linux (WSL) является удобным способом запуска дистрибутивов Linux вместе с Windows 11 или Windows 10, облегченная виртуальная машина будет продолжать работать в фоновом режиме даже после выхода из командной оболочки, обязательно используя системные ресурсы. .
Если вы предпочитаете завершить работу дистрибутива Linux (Ubuntu, Kali, Debian, Mint и т. д.) сразу после завершения его использования или перезапустить его, вы можете закрыть его с помощью инструмента командной строки wsl.exe. отключить один или все дистрибутивы вручную.
В этом руководстве вы узнаете, как закрыть дистрибутивы Linux, работающие на платформе WSL2, в Windows 10 и Windows 11.
Завершить дистрибутив Linux на WSL
Чтобы завершить работу дистрибутива Linux на WSL в Windows 11 или Windows 10, выполните следующие действия:
Открыть Пуск.
Выполните поиск командной строки (или PowerShell), щелкните правой кнопкой мыши верхний результат и выберите параметр «Запуск от имени администратора».
Введите следующую команду, чтобы просмотреть все запущенные дистрибутивы WSL, и нажмите Enter:
Введите следующую команду, чтобы закрыть дистрибутив Linux в Windows 11 или Windows 10, и нажмите Enter:
В команде замените DISTRO-NAME на имя дистрибутива, который вы хотите закрыть, как показано на шаге 3. Например, wsl -t Ubuntu-20.04 .
(Необязательно) Введите следующую команду, чтобы подтвердить, что дистрибутив больше не работает, и нажмите Enter:
После выполнения этих шагов дистрибутив, работающий в подсистеме Windows для Linux, корректно завершит работу. Вы всегда можете повторить шаги, чтобы закрыть другие дистрибутивы, или использовать приведенные ниже шаги, чтобы закрыть их все.
Завершить работу всех дистрибутивов Linux на WSL
Чтобы закрыть все дистрибутивы WSL, работающие в Windows 10 (или 11), выполните следующие действия:
Открыть Пуск.
Выполните поиск командной строки (или PowerShell), щелкните правой кнопкой мыши верхний результат и выберите параметр «Запуск от имени администратора».
Введите следующую команду, чтобы просмотреть все запущенные дистрибутивы WSL, и нажмите Enter:
Введите следующую команду, чтобы закрыть дистрибутивы Linux в Windows 11 или 10, и нажмите Enter:
(Необязательно) Введите следующую команду, чтобы подтвердить, что дистрибутив больше не работает, и нажмите Enter:
После выполнения этих шагов работа всех дистрибутивов WSL будет немедленно завершена.
Если вам нужно перезапустить дистрибутив Linux, просто снова откройте его из меню «Пуск», командной строки или PowerShell с помощью команды wsl --distribution ИМЯ-ДИСТРОМА. выполнение команды.
Pureinfotech рассчитывает на вашу поддержку. Вы можете внести свой вклад с помощью кнопки ниже, чтобы продолжать создавать отличный контент.
Мы можем получать комиссию за покупки по нашим ссылкам, чтобы продолжать предлагать бесплатный контент. Информация о политике конфиденциальности.
Все материалы на этом сайте предоставляются без каких-либо явных или подразумеваемых гарантий. Используйте любую информацию на свой страх и риск. Всегда делайте резервную копию вашего устройства и файлов, прежде чем вносить какие-либо изменения. Информация о политике конфиденциальности.
Читайте также: