Пример программирования C - PullRequest
0 голосов
/ 21 мая 2019

Сколько процессов создается при запуске следующей программы?Я не могу решить.Буду признателен, если вы поможете

int main()
{ 
   int i;
   for (i=fork(); i<2; i++ )
      fork();
}

1 Ответ

0 голосов
/ 21 мая 2019

fork () создает дочерний процесс, создавая другой экземпляр родительского процесса.Он возвращает 0 дочернему элементу и PID дочернего элемента родительскому элементу.

В этом случае при выполнении i = fork () родитель получает i, назначенный в качестве PID идентификатора PIDдочерний процесс, который, скорее всего, больше 1. Цикл for в родительском процессе не будет запущен ни разу, так как i <2 </strong> завершится ошибкой.На данный момент существует два процесса P и C1 (дочерний)

. После того, как родительский элемент выполнит разветвление, дочерний элемент получает 0 в качестве возвращаемого значения, i = 0. Это означает условие i <2 </strong> успешно.Child выполняет fork () в теле цикла, создавая C2.Значение i в C1 и C2 равно 0. i увеличивается до 1.

C1 и C2 выполняют i <2 </strong>, это условие успешно.Вилка выполнена обоими.С3 порождается С1, а С4 - С2.

Значение i увеличивается до 2. i <2 не выполняется.Все они выходят из цикла </p>

Подводя итог, в этой программе создано 4 дочерних процесса.Вы можете попробовать это с помощью следующей программы, где вы увидите, как распечатываются 5 PID.

    #include <stdio.h>
    main()
    {
       int i = 0;
       for (i = fork(); i < 2; i++)
          fork();
       printf("Hello World i %d\n", getpid());
    }
...