正如我们所学,init 进程是 Linux 启动过程中运行的第一个进程。它是所有其他进程的父进程,负责启动必要的服务,使系统进入可用状态。但它是如何实现这一点的呢?
Linux init 系统有三种主要的实现方式,每种方式在管理服务方面都有不同的方法。
System V Init
System V init,通常称为 sysvinit,是 Linux 的传统 init 系统。它遵循由脚本定义的顺序启动过程。系统的状态通过运行级别(runlevels)来管理,每个运行级别(例如,单用户模式、带网络的多用户模式)都有特定的一组要启动或停止的服务。在经典的 Linux 启动过程中,这曾是长期以来的标准。
Upstart
Upstart 存在于较旧的 Ubuntu 版本中,它是一个基于事件的 init 系统。它摒弃了 System V 的严格顺序模型。相反,Upstart 会响应系统事件(例如网络设备可用)来启动和停止服务(称为作业 job)。这使得启动时间更加灵活和快速。
systemd
Linux init 系统的现代标准是 systemd。它是一个面向目标的系统,积极地管理依赖关系。它不仅仅是启动一个服务列表,而是定义一个目标状态(如图形界面),然后 systemd 会努力满足该目标的所有依赖项,通常并行启动服务,从而显著加快启动过程。
我们有一个关于 Init 系统的完整课程,将在其中更详细地深入探讨这些系统中的每一个。