Operating system C语言中Forking的输出

Operating system C语言中Forking的输出,operating-system,fork,Operating System,Fork,给定PID=4224 为什么我会得到以下代码片段的输出: x=10922 y=0 我是10923 x=0 y=2 我是10922 x=0 y=2 我是10922 x=0 y=0 我是10924 对于此代码: #包括 #包括 #包括 int main(){ int x=1,y=2; int-pid; x=fork(); 如果(x==0){ printf(“x=%d y=%d\n”,x,y); pid=getpid(); printf(“我是进程:%d\n”,pid); } y=fork(); 如果

给定PID=4224 为什么我会得到以下代码片段的输出:

x=10922 y=0 我是10923 x=0 y=2 我是10922 x=0 y=2 我是10922 x=0 y=0 我是10924

对于此代码:

#包括
#包括
#包括
int main(){
int x=1,y=2;
int-pid;
x=fork();
如果(x==0){
printf(“x=%d y=%d\n”,x,y);
pid=getpid();
printf(“我是进程:%d\n”,pid);
}
y=fork();
如果(y==0){
printf(“x=%d y=%d\n”,x,y);
pid=getpid();
printf(“我是进程:%d\n”,pid);
}
返回0;
}

让我们从以下内容开始,即程序的输出:

x = 0 y = 2     
I am process: 330161
x = 330161 y = 0
I am process: 330162
x = 0 y = 0
I am process: 330163
请注意,订单与您的有所不同。这是因为哪个进程首先运行取决于环境。因此,让我们稍微修改一下程序,使其更加清晰:

#include <stdio.h>
#include <unistd.h>
int main() {
    int x = 1, y = 2;
    int pid;
    x=fork();
    if(x==0){
        pid = getpid();
        printf("1:x = %d y = %d I am process %d\n", x, y, pid);
    }
    fflush(NULL);
    y  = fork();
    if(y==0){
        pid = getpid();
        printf("2:x = %d y = %d I am process %d\n", x, y, pid);
    }
    return 0;
}
由此可知,主进程的第一个子进程是33014。二是33015;而孙子(孩子的孩子)是33016。 我希望这能给你足够的答案


不要害怕使用这些示例程序。这是了解系统工作原理的一个好方法。

很难理解你到底在问什么。你还不明白什么?你需要什么帮助?我需要关于代码输出的帮助?发布代码,而不是它的图片。没有人想重新键入它以便为您运行它…@Daniel Right。你需要什么帮助?如果您只想知道代码的输出,请键入并运行它。如果你有一个关于理解输出是什么以及为什么是这样的问题,那是什么问题?我只是想要运行这个的输出,但是输出结果是x=10922 y=0 I am进程:10923 x=0 y=2 I am进程:10922 x=0 y=2 I am进程:10922 x=0 y=0 I am进程:10924你把fflush()放进去了吗?你的第二行是重复的——你不应该看到相同的x,y组合。这是fork()的症状,而
文件*
缓冲区中存在缓冲数据。通常,printf中的
\n
会导致刷新,但如果将输出重定向到实际的文件或管道,则情况并非如此。非常感谢,我现在理解了!!
1:x = 0 y = 2 I am process 330214
2:x = 330214 y = 0 I am process 330215
2:x = 0 y = 0 I am process 330216