启动过程:Init
100%

启动系统 · 第 5 课

启动过程:Init

了解 PID 1 如何初始化用户空间、监管服务、回收子进程并协调关机。

内核会在 PID 命名空间中以 PID 1 启动第一个用户空间进程。在完整 Linux 系统上,这个 init 进程会建立服务环境。在容器中,PID 1 也可能是小型 init 包装程序或应用程序本身,但仍承担特殊的信号和子进程回收职责。

PID 1 的职责

Init 系统通常会:

  • 启动并监管服务、登录、挂载和其他工作单元
  • 根据依赖关系和配置的目标状态安排工作顺序
  • 接管并回收孤儿子进程
  • 根据策略响应服务失败
  • 协调有序关机和重启

具体边界有所不同。设备管理、网络、日志和定时任务可以是由 init 监管的独立程序,而不是直接内置到 PID 1 中。

在自身 PID 命名空间中,哪项职责是 PID 1 所特有的?

System V Init 与运行级别

传统 sysvinit 使用 /etc/inittab 等配置,以及各运行级别对应的启动与关闭脚本。运行级别表示一种运行模式,但数字级别的含义可能因发行版而异。脚本顺序由约定决定,发行版工具也可以扩展或并行执行。

不能仅仅因为存在 /etc/init.d/ 就推断主机正在使用哪种 init 系统;即使 PID 1 是其他实现,兼容脚本也可能保留。

System V 运行级别表示什么?

基于事件和依赖的系统

Upstart 引入了事件驱动的作业模型,旧版 Ubuntu 和其他一些系统曾使用它。现在它主要只具有历史或旧系统运维意义。

Systemd 被当前许多通用发行版广泛使用。它把服务、套接字、挂载、定时器、设备、目标和其他资源建模为单元。声明式依赖关系和激活机制让独立工作能够并发推进,同时保留必要顺序。

其他仍在使用的 init 和监管设计包括 OpenRC、runit、s6 和 BusyBox init。“最新”并不是有用的兼容性规则;应识别实际系统运行的内容并使用其文档。

Systemd 如何表示服务和挂载等受管资源?

识别正在运行的 Init

应检查 PID 1,而不是根据已安装文件猜测:

$ ps -p 1 -o pid,comm,args=
$ readlink /proc/1/exe

权限、容器和命名空间会影响看到的内容。在容器中运行命令时,报告的是该命名空间中的 PID 1,不一定是主机 init。识别后,应使用其原生状态和日志工具,不要混用其他 init 家族的命令。

为什么检查 PID 1 比查看是否存在旧式脚本目录更可靠?

课程已完成

你已完成 启动过程:Init

现在,你可以把 init 理解为一种角色,而不是强制要求的单一实现。

  • 理解 PID 1 与服务初始化、子进程回收和关机的关系。

  • 把 System V 运行级别理解为发行版定义的运行模式。

  • 理解 systemd 资源与依赖关系如何映射为单元。

  • 选择工具前,检查相关命名空间中正在运行的 PID 1。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
返回 启动系统