2016-09-19 1 views
-2

Im изучая оперативные системы и не может действительно понять этот кусок кода:C процесс и процесс порождения

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

int main() 
{ 
    int pid; 
    int i; 

    pid = fork(); 

    switch(pid) 
    { 
     case -1: 
      perror ("Error \n"); 
      break; 

     case 0: 
      for(i=1; i < 11; i++) 
       printf ("Im the son %d, My father is %d - Loop %d \n", getpid(), getppid(), i); 
      break; 

     default: 
      for(i=1; i < 11; i++) 
       printf ("Im the father %d and my father is %d - Loop %d \n", getpid(), getppid(), i); 

      wait(NULL); 
      printf("End of the father process %d - My son process %d have finished.\n", getpid(), pid); 
      break; 
    } 

} 

Я понимаю, что вы вилка (создать дубликат процесса), если все прошло нормально (разные от -1), то он зацикливается на for десять раз, а затем ломается, что я не понимаю, так как сын может вернуться к for, я имею в виду, если это 0 (сын), вы печатаете «это сын X и мой отец Y ", а затем ломается. как получается, что он обходит их обоих в 10 раз ?.

+0

Дочерний процесс исполняет «случай 0:» положение и исходный процесс (родительский) выполняет «по умолчанию:» дизъюнкция. Оба они работают одновременно (хотя порядок выполнения кода не определен). – Mick

+0

Спасибо Мику, теперь он не определен, но что дает? Я имею в виду, в какой-то момент они заканчиваются (возможно, смешанные). Есть ли какая-то часть Оперативной системы, которая придает приоритет процессу, чем другой? – user3442470

+0

Я действительно неправильно понял ваш вопрос. Райли понял все правильно. – Mick

ответ

2

for() без {} выполняет только следующую строку повторно.

for(i=1; i < 11; i++) 
    printf(); 
break; 

такого же, как

for(i=1; i < 11; i++) { 
    printf(); 
} 
break; 
+0

Спасибо, Райли, теперь у меня есть еще один вопрос, как он смешался? Кто дает приоритет над одним процессом, чем другой? есть ли какой-нибудь алгоритм в ОС, который разрешает это? – user3442470

+0

Два процесса будут переключаться и выходить из CPU. Обычно ни один из них не имеет приоритет над другим. Одна из самых больших задач ОС - решить, какой процесс будет выполняться. Google 'cpu scheduler'. – Riley

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

  • Нет связанных вопросов^_^