switch_root 命令如何在新文件系统 pid 1 进程中创建 /sbin/init ?

switch_root 命令如何在新文件系统 pid 1 进程中创建 /sbin/init ?

当内核启动到 initramfs 时,会启动一个 init 进程,为真正的 rootfs 做一些准备。当真正的rootfs准备好后,initramfs中的init进程应该移交给真正rootfs中的另一个init。

我的问题是:当 init(old) 已经有进程 id 1 时,为什么新的 init 进程也有进程 id 1?

有人说切换是用switch_root命令完成的,我看了代码,发现switch_root只挂载/dev、proc等,将root更改为新的fs,然后execv(/sbin/init)。

switch_root 应该作为 init(old) 的子进程执行,并且进程 ID 应该为 2,3 或除 1 以外的任何值。对吗?

相关内容