首页 > 解决方案 > 为什么我在分叉时会得到这个变量的两个值?

问题描述

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    int rc = fork();
    int pid = getpid();
    
    printf("from 1: %d\n", pid);
    if (rc == 0) {
        printf("from 2: %d\n", pid);
        rc = fork();

        if (rc == 0) {
            printf("from 3: %d\n", pid);
        } else {
            printf("from 4: %d\n", pid);
        }
            
    } else {
        printf("from 5: %d\n", pid);
    }
}

当我运行这段代码时,我得到这个输出:

from 1: 5890
from 5: 5890
from 1: 5891                                                                                             
from 2: 5891
from 4: 5891
from 3: 5891

1 - 为什么1会执行两次?

2 - 为什么我得到变量的两个值pid

标签: cprocessfork

解决方案


因为在第一个之后,fork您有两个进程都打印该1行:父进程和子进程都执行该语句。


如果您也在rc该行上打印,可能会更清楚:

printf("from 1: %d %d\n", pid, rc);

使用问题中的示例 pid,上面应该打印

从 1: 5890 5891
从 5: 5890
从 1: 5891 0
...

推荐阅读