私の理解は、少なくとも初期ユーザースペースではinitが終了できないシェルスクリプトであるということです。そうですか?
では終わったらどうなりますか?
通常の起動順序では、初期ユーザースペースのinitシェルスクリプトはルートファイルシステムをマウントし、新しいルートからinitに制御を転送することを知っています。しかし、これが起こらないと仮定すると、ルートはマウントされず、制御は新しいルートinitに移行されません。 initスクリプトが終わったらどうなりますか?
ベストアンサー1
私の理解は、少なくとも初期ユーザースペースではinitが終了できないシェルスクリプトであるということです。そうですか?
シェルスクリプトである必要はありません。もちろん、init
プロセスを終了することもできます。これによりカーネルパニックが発生しますが、完了する可能性があります。
では終わったらどうなりますか?
スクリプトは一般的にexec switch_root /root "$@"
。exec
したがって、プログラムが変更され、init
カーネルはexit
initプロセスの情報を見ることができません。
これにより initramfs がクリーンアップされ、マウントがswitch_root
exec
.so にバインドされ、PID は常に 1 に保持されます。/sbin/init
/root
/
init
ここでは、BusyBoxのswitch_rootのソースコードを見ることができます。本当に簡単です。https://git.busybox.net/busybox/plain/util-linux/switch_root.c最後に、後ろで何が起こっているのかを説明する長い解説もあります。