1

オペレーティングシステムのコースを勉強している間、なぜこのような以下のコードの出力が必要なのか理解できませんでした

コード:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h> 

int main (int argc, const char * argv[]) {

    int value = 5;


    pid_t pid = fork();
    printf("pid = %d \n",pid);
    if (pid == 0){
        value+=15;      
        printf("Value ch :%d \n",value);
    }
    else {
        if (pid > 0) {
            wait(NULL);
            printf("Value pr :%d \n",value);
            exit(1);
        }

    }

    return 0;
}

出力:

run
[Switching to process 24752]
Running…
pid = 24756 
pid = 0 
Value ch :20 
Value pr :5 

子の値が20になった場合、子の値=から5に戻った後の理由

4

2 に答える 2

4

fork()独自のアドレス空間を持つ新しいプロセスを作成するためです。このアドレス空間は、元のアドレス空間の内容のコピーで埋められます。したがって、一方のプロセスで行われた変更は、もう一方のプロセスには影響しません。

つまり、プロセスがメモリを共有しないためです(明示的にwithmmap()などを強制しない限り)。

于 2010-11-19T15:41:43.860 に答える
0

親プロセスのメモリが子プロセスにコピーされ、子プロセスのメモリをさらに変更しても、親のプロセスには影響しないためです。フォークの落とし穴は興味深いものです。

于 2010-11-19T15:43:10.317 に答える