Linux Mint中的功能分支

时间:2014-01-10 21:53:28

标签: c linux system fork mint

当我编译此代码并运行它时,我得到一个结果“PARENT”出现在“CHILD”之前。 有关我在Linux Mint上的信息。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

void main(){

pid_t pidc ;
pidc = fork();

if(pidc < 0)
{printf("error !\n");}

else if(pidc == 0){
        printf("I am the child process! \n");
            }
else{
        printf("I am the parent process! \n");
     }
}

这是结果:

  

我是父进程!

     

我是孩子的过程!

那么,有人有想法吗?并谢谢。

4 个答案:

答案 0 :(得分:1)

一旦你fork编辑,结果两个进程基本上独立运行。您不会假设父级将在子级之前运行(反之亦然),而不添加某种机制来强制它这样做。

答案 1 :(得分:0)

这被称为竞争条件。您需要有一种机制来同步这两个进程。

答案 2 :(得分:0)

我只需添加'等待(NULL)',谢谢大家。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

void main(){

pid_t pidc ;
pidc = fork();

if(pidc < 0)
{printf("error !\n");}

else if(pidc == 0){
        printf("I am the child process! \n");
            }
else{
       wait(NULL);
       printf("I am the parent process! \n");
     }
}

答案 3 :(得分:0)

您可能会感到困惑,因为子进程的if条件发生在父if条件之前。

当您致电fork()时,您的现有流程将被克隆到新流程中。原始进程将从fork()调用中收到子PID的返回值,该子进程将获得0的PID。

fork()成功后,两个进程将并行运行。要并行运行,进程会在执行期间获得一小段时间,并且在执行结束时,它们会在另一个进程执行时暂时冻结。您无法知道两个进程中的哪一个将首先执行。父进程和子进程都将在fork()调用之后开始执行相同的代码,但由于pidc的值不同,它们将选择if语句的不同分支。因此,第一个进程恰好被赋予一段将首先输出的执行时间,if语句的顺序不相关。