对于初学者

对于初学者

的手册页systemd说:

   --system, --user
       For --system, tell systemd to run a system instance, even if the
       process ID is not 1, i.e. systemd is not run as init process.
       --user does the opposite, running a user instance even if the
       process ID is 1. 

如何将 systemd 作为 pid 1 和 pid 非 1 的进程运行?

pid不为1的系统实例是什么意思?它可以与 pid 1 的系统实例共存吗?

系统实例是否意味着 euid/ruid 为 root 的进程?

用户实例是否意味着 euid/ruid 为非 root 的进程?

谢谢。

答案1

对于初学者

在 UNIX 系统(包括 Linux)中,所有进程都有一个进程标识符, 或者PID。这是一个用于在运行时引用进程的数字。通常,不可能预测进程将具有哪个 PID。

然而,有一个特殊进程的 PID 始终为 1:初始化进程,这是系统启动期间启动的第一个进程。除了启动所有重要的后台进程之外,它还有其他几个目的/任务。

systemd 是可以作为进程 1 运行的几个可能的程序之一。但是,它还有一个附加功能,它还可以在“每用户模式”下运行,管理该特定用户所需的后台进程(例如,连接到智能手机——这需要 Linux 上的特殊服务器)。通常,它可以从 PID 中得知自己应该做什么。这些命令行开关允许您覆盖它。

有关为什么以及如何执行此操作的更多信息,我建议Arch Linux wiki 上的此页面。尽管Arch 被认为是一个精英主义和困难的发行版,但它的文档非常好并且令人惊讶地易于访问。

回答您的具体问题:

如何将 systemd 作为 pid 1 和 pid 非 1 的进程运行?

要使用 PID 1 运行 systemd,它必须是您的 init 程序。大多数 Linux 发行版都可以从多个此类服务中进行选择(其他服务包括 SysV Init、Upstart、runit 和 OpenRC),但 systemd 通常是默认服务。因此,这可能已经发生在您的计算机上。

要使用 PID 以外的 1 运行 systemd,您只需在任何其他情况下运行它即可。同样,这可能已经发生在您的计算机上,因为主流发行版也在上述每用户模式下使用 systemd。对于您可以用它做的一些事情,请参阅我上面链接的 Arch wiki 页面。

系统实例是否意味着 euid/ruid 为 root 的进程?用户实例是否意味着 euid/ruid 为非 root 的进程?

系统实例的UID和EUID将始终为0(root),这样它就可以为其启动的程序提供所有所需的权限。在 Linux(和大多数 UNIX 系统)上,以完全权限开始然后放弃除实际需要之外的所有权限是很常见的。

但是,最多可能有一个每个用户的 systemd 实例也具有 UID 0:请记住,root 只是另一个用户。虽然大多数现代 Linux 发行版默认都会采取措施防止这种情况发生,但很有可能以 root 身份登录。

最后一句警告

不要,在任何情况下,在您用于重要工作的计算机上尝试使用 systemd、以 root 身份登录或任何其他与启动或 root 相关的操作。

答案2

该男子将得到纠正,我报告了问题https://github.com/systemd/systemd/issues/12843

--system不能与 PID 不等于 1 一起使用。

相关内容