我正在尝试检查命令的输出pstree
。但出于某种原因,它总是从名为 as 的某个程序开始,systemd
而不是从 init 开始。我已使用ps aux
命令检查了 init 和 systemd 的进程 ID,发现 init 的 PID 为 1,而 systemd 有其他 PID。那么为什么我的 pstree 输出中没有显示 init?我需要提供一个选项吗?
另外,我确实读过关于 systemd 与 init 的争议,但是 ubuntu 16.04 LTS 仍然使用 init 来启动一切,对吗?
更新为什么 PID 不同?
事实证明,我认为不同的 PID 是我的无知造成的。 init 的 PID 为 1,而 systemd 不是我所说的东西。相反,当我运行 时ps aux|grep systemd
,我发现了 的 PID /lib/systemd/systemd-*
,其中*
意味着一些额外的字符。所以我谈论的不是 systemd,而是一些其他进程,我猜它们是 systemd 的扩展(这是正确的词吗?)。
*
以下是一些示例
/lib/systemd/systemd-journald
/lib/systemd/systemd-udevd
/lib/systemd/systemd-timesyncd
答案1
从 15.04 开始,Ubuntu 上的 init 是 systemd。可以使用 Upstart,但默认为 systemd。例如,/sbin/init
将是指向 的链接/lib/systemd/systemd
。/sbin/{shutdown,reboot,telinit,halt,runlevel,poweroff}
是指向 的链接/sbin/systemctl
。即使在 16.04 中,Upstart 也被用作会话初始化,因此您可能会在图形登录中看到 Upstart 作为父进程或祖先进程(尽管在 16.10 中似乎已经发生了变化)。
您看到的其他进程是 systemd 组件;它们与 systemd 一起开发和分发,但许多对于将 systemd 作为 init 运行来说并非必不可少。许多组件可以替换或禁用。引用systemd 主页:
systemd 是 Linux 系统的一套基本构建块。它提供了一个以 PID 1 运行的系统和服务管理器,并启动系统的其余部分。... 其他部分包括日志守护程序、用于控制基本系统配置(如主机名、日期、语言环境)、维护登录用户和正在运行的容器和虚拟机列表的实用程序、系统帐户、运行时目录和设置,以及用于管理简单网络配置、网络时间同步、日志转发和名称解析的守护程序。
和这篇博文来自 systemd 的创建者之一 (Lennart Poettering):
误解:systemd 不允许您替换其组件。
事实并非如此,除了极少数例外,您可以关闭和替换 systemd 的几乎任何部分。这些例外(例如 journald)通常允许您同时运行替代方案,同时与其很好地协作。