的手册页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 一起使用。