プロセスに割り当てられた各ページ (スタックまたはヒープを持つ仮想メモリ ページ) は、フォークされたプロセスがアクセスできるようにコピーされます。
実際には、最初からコピーされず、Copy-on-Write に設定されています。つまり、プロセスの 1 つ (親または子) がコピーされたページを変更しようとすると、互いに害を及ぼさないようにします。 fork() のポイントからのすべてのデータにアクセスできます。
たとえば、実際の実行可能ファイルがメモリ内でマップされたコード ページは、通常は読み取り専用であり、分岐されたすべてのプロセス間で再利用されます。再度コピーされることはありません。コピー オン ライトは必要ありません。
詳細については、こちらとこちらをご覧ください。
フォークの後、子は親から完全に独立していますが、親のコピーである特定のものを継承する場合があります。ヒープの場合、子は概念上、フォーク時に親ヒープのコピーを持ちます。ただし、子のアドレス空間のヘッドへの変更は、子のコピーのみを変更します (たとえば、コピー オン ライトを介して)。
ドキュメンテーションについて:ドキュメンテーションには通常、すべてと記載されていることに気付きました。 を除いてコピーされます 何とか、何とか何とか。
短い答えは「ダーティオンライト」です-長い答えは..ずっと長くなります。
しかし、すべての意図と目的のために-Cレベルで安全に想定できる作業モデルは、 fork() の直後に2つのプロセスが完全に同一であるということです-つまり、子は100%正確なコピーを取得します- fork()) の戻り値の周りのビット - そして、それぞれの側がそのメモリ、スタック、およびヒープを変更するにつれて発散し始めます。
したがって、あなたの結論は少しずれています。子は親と同じデータを独自のスペースにコピーして開始し、それを変更し、変更されたものと見なしますが、親は独自のコピーを続行します。
実際にはもう少し複雑です - 何か汚いことをして完全なコピーを避けようとするからです。必要になるまでコピーを避ける
Dw.