fork() в программе C

Это вопрос из недавнего вступительного экзамена GATE.
Процесс выполняет код

fork();  
fork();  
fork();  

Общее количество дочерних процессов составляет

(A) 3. (B) 4. (C) 7. (D) 8.

Мой ответ было (A) 3.

Я считаю, что после каждого fork() будет создан 1 дочерний процесс, а выполнение родительского продолжится в обычном режиме.

Ненадежный ответ (без каких-либо объяснений) от коучинговых институтов: (C)7.

Я думаю, что они считают, что каждая вилка будет создавать дочерний процесс и новый родительский процесс. И они также учитывают все родительские процессы. [Мне не разрешено публиковать изображение, но мой друг объяснил на диаграмме дерево, в котором каждый левый узел разветвляется на два узла. Следовательно, 4 родительских узла слева и 3 дочерних узла справа. Но в Вопросе четко упоминается только дочерний процесс. А также я не думаю, что родительский процесс создается заново при разветвлении.

Может ли кто-нибудь объяснить некоторые основы разветвления и правильное решение вышеуказанного вопроса, пожалуйста.

P.S. Если язык программирования имеет какое-либо значение в концепции разветвления, то, согласно учебной программе, это должна быть программа на C или C++.

8
задан Bernd Elkemann 6 June 2013 в 17:41
поделиться