fork()
Системный вызов создает дочерний элемент, который выполняет тот же код, что и родительский. С этого момента выполняется 2 процесса, выполняющих следующую строку: родительский и дочерний. Каждый из них выполняет команду printf()
.
Второй раз цикл for
выполняется, то выполняется родителем и ребенка: каждый из них выполнять fork()
, и поэтому с этого момента есть 4 процесса: 2 первых из них, а также их новые дети ,
Итак, для каждой итерации в цикле вы удваиваете количество процессов. Общее число процессов, таким образом, 2^10 = 1024.
Таким образом, printf()
внутри цикла for
выполняется:
- 10 раз в течение первых 2 процессов
- 9 раз для своих детей (2) процессы
- 8 раз для следующего поколения (4 новых детей)
- 7 раз для следующего (8 детей)
- 6 раз FOT следующего (16 детей)
- 5 раз для следующего (32 детей)
- 4 раза для следующего (64 детей)
- 3 раза для следующего (128 детей)
- 2 раза в течение следующего (256 дети)
- 1 раз за последний (512 детей)
Итого: 10 * 2 + 9 * 2 + 8 * 4 + 7 * 8 + 6 * 16 ± 5 * 32 + 4 * 64 + 3 * 128 + 2 * 256 + 1 * 512 = 2046.
printf()
Выполняется 2046 раз.
Вы должны размещать или, по крайней мере, более подробно описать, вывод, который вы получите, и сказать, что вы ожидали получить. – ams