Unix fork()进程。。。我需要帮助。我有答案,但我不明白是怎么做到的。

Unix fork()进程。。。我需要帮助。我有答案,但我不明白是怎么做到的。,unix,process,fork,Unix,Process,Fork,变量x有多少个不同的副本?当流程完成时,他们的价值观是什么 main (int argc, char ** argv){ int child = fork() int x = 5; if (child == 0) { x += 5; } else { child = fork(); x += 10; if(child) { x += 5; } }

变量x有多少个不同的副本?当流程完成时,他们的价值观是什么

main (int argc, char ** argv){
    int child = fork()
    int x = 5; 

    if (child == 0) {
       x += 5;
    } else {
        child = fork();
        x += 10; 
        if(child) {
            x += 5;
        }
    }
}

我知道答案,但是有人能帮我解决这个问题吗

每次调用fork()函数时返回2次。 它创建两个进程,将0返回给父进程,将另一个值返回给子进程。
这意味着两个条件都将被执行

我不知道您是否正确地提出了您的问题,即x的副本(与地址空间的数量相比),但fork的工作原理如下:

  • 每次调用此方法时,都会为所有对象创建2个地址空间 下面的陈述

  • 就你而言:

    • 在“int child=fork()”之后,将创建2个地址空间,并在 “child=fork()”,它将仅对父级、父级执行 将进一步打断2个地址空间

    • 所以答案是3