Количество процессов - PullRequest
       19

Количество процессов

0 голосов
/ 29 января 2019

Я готовлюсь к экзамену, делаю уже решенные упражнения.Однако у меня есть проблема с одним, касающимся процессов, потому что я думаю, что я делаю это правильно, однако, ответ не соответствует моему.Это следующая проблема:

Ниже приведен код для программы с именем Agent_Smith.c.Включая исходный родительский процесс, сколько процессов Agent_Smith создано?Предположим, что нет ошибок.

https://imgur.com/NLvbzKn

Я знаю, что только дочерние процессы имеют pid = 0, в то время как их родительские объекты наследуют фактический pid (! = 0).Итак, я делаю это: (при условии, что smith = fork (); это fork1 и т. Д.)

https://imgur.com/9sHNRP1

В упражнении говорится, что процессы , включая Первоначальный родитель 12 лет, а мой 13, и я не знаю, где я делаю неправильно.Я думаю, что это ошибка в решении, однако я не уверен, поэтому я хотел спросить.Я новичок в этом сайте, поэтому извиняюсь, если что-то сделано неправильно.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Обозначим parent как p0.

Итак, первый fork () сгенерирует нового потомка, поэтому до сих пор у нас будет 2 процесса.

Parent получит значение большечем 0. Таким образом, он войдет в цикл for, следующие 2 fork() сгенерируют 3 новых процесса.Так что до сих пор у нас есть 1 родительский и 4 новых процесса.

Теперь первый дочерний процесс выполнит оператор else.Три fork() сгенерируют всего 8 процессов, включая первого дочернего и 7 новых процессов.В конце мы получим 1 родительский, 1 дочерний, сгенерированный при запуске, 3 новых процесса, сгенерированных в условии if, 7 новых процессов, сгенерированных в условии else.Итого всего 12 процессов.

0 голосов
/ 29 января 2019

Я также нахожу 12 процессов.Я не очень понимаю ваш рисунок, но вот что я нахожу, если все вилки пронумерованы 1-6 в порядке программы.Процессы нумеруются так, как если бы они были созданы в программном порядке.

P0 is parent
P0 -> fork1 P1  
P1 -> fork2 P2 
   -> fork3 P3
   -> fork4 P4
P2 -> fork3 P5 
   -> fork4 P6
P3 -> fork4 P7
P5 -> fork4 P8
P0 -> fork5 P9
   -> fork6 P10
P9 -> fork6 P11

Таким образом, существует 12 процессов P0-P11.

Кстати, никогда не давайте код в виде изображения.Есть способы отформатировать их inline.

...