Сколько процессов создается с помощью этих fork() операторов?

Я считаю, что это создает 24 процесса; однако, мне нужна проверка. Эти вопросы часто преследуют меня. Спасибо за помощь!

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
  pid_t pid = fork();
  pid = fork();
  pid = fork();
  if (pid == 0)
  {
    fork();
  }
  fork();
  return 0;
}

Ответ 1

С этим легко рассуждать. Вызов fork создает дополнительный процесс каждый раз, когда он выполняется. Вызов возвращает 0 в новый (дочерний) процесс и идентификатор процесса дочернего элемента (но не нуль) в исходном (родительском) процессе.

pid_t pid = fork();  // fork #1
pid = fork();        // fork #2
pid = fork();        // fork #3
if (pid == 0)
{
  fork();            // fork #4
}
fork();              // fork #5
  • Fork # 1 создает дополнительные процессы. Теперь у вас есть два процесса.
  • Fork # 2 выполняется двумя процессами, создавая два процесса, в общей сложности четыре.
  • Вилка № 3 выполняется четырьмя процессами, создавая четыре процесса, в общей сложности восемь. Половина из них имеют pid==0 и половина имеют pid != 0
  • Fork # 4 выполняется половиной процессов, созданных fork # 3 (так, четыре из них). Это создает четыре дополнительных процесса. Теперь у вас двенадцать процессов.
  • Вилка № 5 выполняется всеми двенадцатью оставшимися процессами, создавая еще двенадцать процессов; теперь у вас двадцать четыре.

Ответ 2

Вычислите таким образом:

Начните с 1 (Основной процесс) и для каждой вилки сделайте это дважды, если fork не находится внутри if (pid == 0), иначе добавьте 1/2 текущего процесса к текущему числу процессов.

В вашем коде: 1P Получил # 1 fork(), чтобы удвоить текущее количество процессов. Теперь новый номер процесса 2P

Получите # 2 fork(), чтобы удвоить текущее количество процессов. Теперь новый номер процесса 4P

Получите 3 fork(), чтобы удвоить текущее количество процессов. Теперь новый номер процесса 8P

Получите # 4 fork(), но ждите его, если условие so (8 + 4 = 12) P

Получите # 5 fork(), чтобы удвоить текущее количество процессов. Теперь новый номер процесса 24P

Ответ 3

Вы правы. Он 24. Просто скомпилировал и запустил его с printf перед окончательным возвратом. Получено 24 строки вывода.