Fork()进程行为

时间:2017-02-09 08:19:01

标签: fork

说我有一段代码

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

int main()
{
    pid_t p ; 
    p = fork (); // p is a new process
    // three cases -1, 0 , >0 
    // -1 will report the error 
    //  0 will tell us that the process is created 
    int i =0 ;
    switch(p)
    {
    case -1 : printf("Error; \n");
              break;

    case 0: printf("I am child and my pid is %d",getpid());
            printf("\nMy parent pid is : %d\n",getppid());
            break;

    default:printf("You are inside parent whose pid is %d\n",getpid());  
            for (int i =20 ; i <= 29; i++)
            {
                printf("%d\n",i);
            }
            break;
    }
}

此代码在不同的操作系统中提供不同的输出。我的系统上有Ubuntu 14.04,大学实验室的操作系统是Red Hat,当我们在不同的机器上执行相同的程序时,输出是不同的。 输出就像(在我的系统上):

You are inside parent whose pid is 5283
20
21
22
23
24
25
26
27
28
29
I am child and my pid is 5284
My parent pid is : 5283

并且实验室内的系统正在输出

I am child and my pid is 5284
My parent pid is : 5283
You are inside parent whose pid is 5283
20
21
22
23
24
25
26
27
28
29

如果我们仔细检查程序,在我的系统输出中,父级首先完成任务,然后将控件提供给子进程,而在另一个系统上,父进程首先创建子级,子级首先执行其操作任务然后恢复回父母。那有什么区别?它是否依赖于系统架构或任何其他参数,如OS。请告诉我们

1 个答案:

答案 0 :(得分:1)

它仅取决于系统的调度程序。如果您在同一台计算机上多次启动程序,结果可能会有所不同。

只要同时启动两个进程,您就无法在其指令之间执行执行顺序。