c - 为什么我在分叉时会得到这个变量的两个值?
问题描述
#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
?
解决方案
因为在第一个之后,fork
您有两个进程都打印该1
行:父进程和子进程都执行该语句。
如果您也在rc
该行上打印,可能会更清楚:
printf("from 1: %d %d\n", pid, rc);
使用问题中的示例 pid,上面应该打印
从 1: 5890 5891 从 5: 5890 从 1: 5891 0 ...