fork()はどのように複数の値を返しますか? [コピー]

fork()はどのように複数の値を返しますか? [コピー]

fork()親プロセスと子プロセスで関数が異なる値を返すのはなぜですか?

親プロセスと子プロセスの両方に書き込み操作がないとします。

答え1

親も子も、相手のメモリにpidを入れる必要はありません。

フォークが発生すると、カーネルは親プロセスのプロセス空間全体をコピーします(これは完全なコピーなしで達成できます。たとえば、最初にページテーブルエントリをコピーしていくつかのメモリに書き込む方法です)。

システムコールの間、カーネルはユーザプロセスをユーザモードで返す前にユーザプロセススタックを回復し、コールの戻り値を渡すことができる。システムコールのすべての戻り値が出るところです。

カーネルが親と子の値が異なる2つのスタックフレームを変更することはまったく問題ではありません。どちらのプロセスも実行されておらず、両方がシステムコール中であるため、スタックフレームが明確に定義されており、すべてのメモリがカーネルにアクセスできます。

関連情報