fork()进程......我需要帮助。我有答案,但我不明白它是如何完成的。

时间:2018-02-21 20:41:38

标签: 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;
        }
    }

}

我知道答案,但有人可以帮助我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我不知道你是否正确构建了你的问题,即x的副本(与地址空间的编号相比),但这里是fork的工作方式:

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

  • 在您的情况下
    • 在“int child = fork()”之后,创建了2个地址空间 “child = fork()”,只会为父,父执行 将进一步打破2个地址空间

    • 所以答案是3