2017-02-09 2 views
1

Скажем, у меня есть кусок кодавилка() поведение процесса

#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 

Если проверить программу тщательно, на выходе моей системы родитель завершает задачу сначала, а затем дает управление дочернему процессу, а в другой системе родительский процесс сначала создает дочерний элемент, потом ребенок выполняет свою задачу, а затем возвращается к родительскому. Так в чем разница? Это зависит от архитектуры системы или от любого другого параметра, такого как ОС. Пожалуйста, дайте нам знать

+0

Возможный дубликат [Можно ли определить порядок выполнения fork()?] (Http://stackoverflow.com/questions/6696959/can-the-order-of-execution-of-fork-be-determined) – GSerg

+0

Короче говоря, ничего нельзя сказать об относительном порядке их исполнения. Это зависит от алгоритма планирования, на который полагается планировщик. В общем, многие алгоритмы дают дочернему процессу более высокий приоритет, так как в большинстве случаев создается дочерний процесс для запуска другой программы, поэтому страницы не копируются для родительского процесса, если они запускаются сначала ... –

ответ

1

Это зависит только от планировщика системы. Если вы запускаете свою программу несколько раз на одном компьютере, результаты могут отличаться.

Как только сразу запускаются два процесса, вы не можете принять порядок выполнения между их инструкциями.

Смежные вопросы