Пример вилки программирования C

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

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

person user9158464    schedule 21.05.2019    source источник
comment
Возможный дубликат функции Fork() в C   -  person Masoud Rahimi    schedule 21.05.2019


Ответы (1)


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

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

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

C1 и C2 выполняют i ‹ 2, это условие выполнено успешно. Вилка выполняется обоими. C3 порождается C1, а C4 - C2.

значение i увеличивается до 2. i ‹ 2 терпит неудачу. Все они выходят из петли

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

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