sudo -u root init 0:wsl debian bullseye: 无法找到要生成的替代 telinit 实现

sudo -u root init 0:wsl debian bullseye: 无法找到要生成的替代 telinit 实现

因此,我在 Windows 10 上运行我的 wsl,当我输入:

sudo -u root init 0 我收到错误:

Couldn't find an alternative telinit implementation to spawn.

Neofetch(无标志或参数):

       _,met$$$$$gg.          linx@win64
    ,g$$$$$$$$$$$$$$$P.       --------------------------
  ,g$$P"     """Y$$.".        OS: Debian GNU/Linux 11 (bullseye) on Windows 10 x86_64
 ,$$P'              `$$$.     Kernel: 5.10.102.1-microsoft-standard-WSL2
',$$P       ,ggs.     `$$b:   Uptime:------------
`d$$'     ,$P"'   .    $$$    Packages: 245 (dpkg)
 $$P      d$'     ,    $$P    Shell: bash 5.1.4
 $$:      $$.   -    ,d$$'    Terminal: /dev/pts/1
 $$;      Y$b._   _,d$P'      CPU: Intel i5-8250U (8) @ 1.799GHz
 Y$$.    `.`"Y$$$$P"'         Memory: 99MiB / 6225MiB
 `$$b      "-.__
  `Y$$
   `Y$$.
     `$$b.
       `Y$$b.
          `"Y$b._
              `"""

当我尝试时也会发生同样的事情:

su root

然后再试一次

答案1

我假设您正在尝试使用telinit 0(以 root 身份)关闭 WSL 下的 Debian。由于以下几个原因,这根本行不通:

  • 尽管被命名为/init,WSL 的 init 进程并不是具有运行级别概念的 SysV Init。

  • 在 Debian 下,无论如何telinit都是 Systemd 的符号链接。从Debian 下的手册页来看:systemctltelinit

    由于 SysV 运行级别的概念已经过时,运行级别请求将被透明地转换为 systemd 单元激活请求

    这也行不通,因为 WSL 不支持 Systemd,除非进行额外的配置(通常不推荐)。请参阅这个 Ask Ubuntu 问题这个超级用户问题了解更多详情。

在 WSL 下运行 Debian 与在 Docker 容器中运行 Debian 非常相似(参考Windows WSL2“发行版”只是底层的 Docker 容器吗?在 SU 上)。容器内部没有“关闭”的概念。这需要从主机(WSL 本身)进行处理。

因此也许有两个真实的您问题中没有问到的问题:

  • 如何在 WSL 下关闭 Debian?

    您有两个选择。首先,您可以使用 终止一个特定的发行版wsl --terminate <distroname>(可能wsl --terminate debian对您而言)。或者,您可以使用 终止所有发行版和托管主机 VM(在 WSL2 下,您通常无法“看到”)wsl --shutdown

    您甚至可以使用 从 Debian 内部运行它wsl.exe --shutdown

    但请注意,这是不是“干净”关闭。内部进程不会提前收到通知,也不会有机会使用 进行“清理” SIGTERM。这引出了下一个问题...

  • 如何在 WSL 下安全地关闭 Debian 中的进程?

    这并不像我想的那么容易。但如果没有 WSL 机制本身可以依赖,最好的选择可能是使用进程/服务管理器来启动和管理您需要安全关闭的任何进程。

    我曾成功导师过去。您可以设置它来启动、管理、查询、停止(等等)服务。

    如果你在 Supervisor 下运行所有​​服务,那么你实际上可以通过以下方式关闭 WSL 下的 Debian:

    wsl -u root -e supervisorctl stop all
    

    一旦 Debian 内部的所有进程都终止,WSL 将在 15 秒后自动终止实例。再过 10 秒(默认情况下),然后 WSL2 将“关闭”虚拟机本身。

相关内容