Скажем, у меня есть кусок кодавилка() поведение процесса
#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
Если проверить программу тщательно, на выходе моей системы родитель завершает задачу сначала, а затем дает управление дочернему процессу, а в другой системе родительский процесс сначала создает дочерний элемент, потом ребенок выполняет свою задачу, а затем возвращается к родительскому. Так в чем разница? Это зависит от архитектуры системы или от любого другого параметра, такого как ОС. Пожалуйста, дайте нам знать
Возможный дубликат [Можно ли определить порядок выполнения fork()?] (Http://stackoverflow.com/questions/6696959/can-the-order-of-execution-of-fork-be-determined) – GSerg
Короче говоря, ничего нельзя сказать об относительном порядке их исполнения. Это зависит от алгоритма планирования, на который полагается планировщик. В общем, многие алгоритмы дают дочернему процессу более высокий приоритет, так как в большинстве случаев создается дочерний процесс для запуска другой программы, поэтому страницы не копируются для родительского процесса, если они запускаются сначала ... –