了解C中的分叉

dev*_*ium 1 c unix fork

我在理解以下简单的C代码时遇到了一些麻烦:

int main(int argc, char *argv[]) {
    int n=0;
    fork();
    n++;
    printf("hello: %d\n", n);
}
Run Code Online (Sandbox Code Playgroud)

我目前对a的理解fork是,从该代码行开始,它将把剩下的代码分成2,它将并行运行,直到"没有更多代码"执行.

从那个棱镜,fork之后的代码将是:

一个)

    n++;                       //sets n = 1
    printf("hello: %d\n", n);  //prints "hello: 1"
Run Code Online (Sandbox Code Playgroud)

b)

    n++;                       //sets n = 2
    printf("hello: %d\n", n);  //prints "hello: 2"
Run Code Online (Sandbox Code Playgroud)

然而,会发生的是两个印刷品

hello: 1
Run Code Online (Sandbox Code Playgroud)

这是为什么?

编辑:只是现在它发现,与线程相反,进程不共享相同的内存.是对的吗?如果是,那就是原因.

cab*_*nga 7

在fork()之后,你有两个进程,每个进程都有自己的"n"变量.