Multithreading 请帮助解释操作系统中的fork()

Multithreading 请帮助解释操作系统中的fork(),multithreading,process,operating-system,Multithreading,Process,Operating System,给出以下代码: 变量c有多少个不同的副本?他们的价值观是什么 因此,答案是有三个过程: 父进程的c值为20 child1过程的c值为10 child2过程的c值为15 有人能帮我详细解释一下吗?一行接一行就好了 我发现还有另一个问题是关于fork的,但我想具体了解这几行代码,以及答案是如何得出的。第一个子进程执行: int child = fork(); int c = 5; /* since child == 0 */ c += 5; int child = fork();

给出以下代码:

变量c有多少个不同的副本?他们的价值观是什么

因此,答案是有三个过程:

父进程的c值为20

child1过程的c值为10

child2过程的c值为15

有人能帮我详细解释一下吗?一行接一行就好了


我发现还有另一个问题是关于fork的,但我想具体了解这几行代码,以及答案是如何得出的。

第一个子进程执行:

int child = fork(); 
int c = 5;
    /* since child == 0 */
    c += 5;
int child = fork(); 
int c = 5;
    /* since child != 0 */
    child = fork(); 
    c += 10;
    /* child == 0 now */
int child = fork(); 
int c = 5;
    /* since child != 0 */ 
    child = fork(); 
    c += 10;
        /* since child != 0 */
        c += 5;
第二个子级执行:

int child = fork(); 
int c = 5;
    /* since child == 0 */
    c += 5;
int child = fork(); 
int c = 5;
    /* since child != 0 */
    child = fork(); 
    c += 10;
    /* child == 0 now */
int child = fork(); 
int c = 5;
    /* since child != 0 */ 
    child = fork(); 
    c += 10;
        /* since child != 0 */
        c += 5;
父进程执行:

int child = fork(); 
int c = 5;
    /* since child == 0 */
    c += 5;
int child = fork(); 
int c = 5;
    /* since child != 0 */
    child = fork(); 
    c += 10;
    /* child == 0 now */
int child = fork(); 
int c = 5;
    /* since child != 0 */ 
    child = fork(); 
    c += 10;
        /* since child != 0 */
        c += 5;

我明白,但对于这段特定的代码,我想了解这些答案是如何得出的。简短的回答是,每次成功调用fork都会创建一个新的流程。除了fork返回的值外,新进程在每个细节上都与旧进程相同。fork在新进程中返回0,但在原始进程中,它返回新进程的pid。pid始终大于0。有关详细答案:请参阅副本。那里的答案详细地说明了这一点。