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