为什么从技术上来说 init 可以成为一个 shell 脚本?

为什么从技术上来说 init 可以成为一个 shell 脚本?

我目前正在研究 GNU/Linux 系统的启动过程和不同方面的组成,我无法合理地解释这一点:你可以在文件init内部写入initramfsshell 脚本。

Init 应该是第一个用户空间进程,也是所有非由内核直接生成的进程的父进程。 init 的 PID 通常是,1这意味着它位于用户空间中所有其他进程之前,而这个“所有进程”中也应该有你的 shell。

#!/bin/sh

init现在,当我在文件内部调用一个 shell(该 shell 应该是它正在创建的同一进程的子进程)时,事情是如何工作的?

答案1

A基于 shell 的 rootfs 切换通常通过exec switch_root 因为exec 没有 fork. 保留 PID 1 已初始化的假设。

当然,这是 Linux,这远非唯一的方法。每个 init 系统,实际上每个发行版,都有自己的 initramfs 打包。例如,initramfs 中的 systemd。

相关内容