说我有一段代码
#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。请告诉我们
答案 0 :(得分:1)
它仅取决于系统的调度程序。如果您在同一台计算机上多次启动程序,结果可能会有所不同。
只要同时启动两个进程,您就无法在其指令之间执行执行顺序。