初期化プロセス/スクリプトはどこで終了しますか?

初期化プロセス/スクリプトはどこで終了しますか?

私の理解は、少なくとも初期ユーザースペースではinitが終了できないシェルスクリプトであるということです。そうですか?

では終わったらどうなりますか?

通常の起動順序では、初期ユーザースペースのinitシェルスクリプトはルートファイルシステムをマウントし、新しいルートからinitに制御を転送することを知っています。しかし、これが起こらないと仮定すると、ルートはマウントされず、制御は新しいルートinitに移行されません。 initスクリプトが終わったらどうなりますか?

ベストアンサー1

私の理解は、少なくとも初期ユーザースペースではinitが終了できないシェルスクリプトであるということです。そうですか?

シェルスクリプトである必要はありません。もちろん、initプロセスを終了することもできます。これによりカーネルパニックが発生しますが、完了する可能性があります。

では終わったらどうなりますか?

スクリプトは一般的にexec switch_root /root "$@"exec

したがって、プログラムが変更され、initカーネルはexitinitプロセスの情報を見ることができません。

これにより 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最後に、後ろで何が起こっているのかを説明する長い解説もあります。

おすすめ記事