
マニュアルページを正しく理解すると、分岐して実行するプロセスのfdテーブルが子プロセスにコピーされ、execveでも保持されます。一方、他のメモリマッピングはexecve後に削除されます。
したがって、プロセスがこれを実行するとき(フォークと実行)、削除するファイル構造を拡張します。
それにもかかわらず、私は大学の教科書で次の質問を見つけました。 「10個のプロセスがファイルを開き、その半分がフォークされ、残りの半分が実行される場合、カーネルにはいくつのファイル構造がありますか?」
正解は10回です。 「子供たちがファイル構造を共有しているからです。」
しかし、実行されたプロセスがファイル構造を破壊するため、5になると思いました。
もしそうなら、これは実行後もファイル構造がカーネルに残るという意味ですか?
答え1
開かれたファイル記述子execve
があると仮定するとexecve
、execve
そうでなければカーネルはまだ開いているファイル記述子が何に該当するかを把握できません。
答え2
教科書の質問は、プロセスで維持する内部データ構造ではなく、カーネルで維持するオープンファイル記述子に関するものです。したがって、教科書の答えは正しいです(ファイル記述子はフォークやexecveによって破壊されないため)。カーネルのファイル構造は破壊されません。
これは、開かれた記述子を介して利用可能なファイルと、それによって読み書きされたデータに関する情報を保持するプロセスによって生成される内部データ構造とは異なります。このデータは、ブランチまたは execve 呼び出しによってプロセス内で維持または維持されない場合があります。