Сколько дочерних процессов создается при выполнении этой программы? - PullRequest
0 голосов
/ 31 октября 2019

Я застрял в строке кода pid = fork();, я понимаю, что до этого было создано 2 дочерних процесса, но некоторые, пожалуйста, уточните, когда он достигнет строки pid=fork();, стирается ли предыдущий дочерний процесс и pidснова начнёт разветвляться с 0 или он просто продолжит разветвляться с двумя детьми?

void main() {
int pid = fork();
if(pid != 0)
    fork();
pid = fork();
if(pid == 0)
    fork();
fork();
exit(0);
 }

1 Ответ

1 голос
/ 31 октября 2019

если fork () успешно, он возвращает 0 дочернему элементу и идентификатор процесса родительскому элементу. Так что для родителей pid! = 0 и для детей это так. После первого if, перед строкой

pid = fork()

. Есть 3 процесса. Затем эти 3 процесса создают по одному новому дочернему элементу, который, в свою очередь, создает другого дочернего. Наконец, все процессы порождают одного дочернего процесса. Это дает нам (3 + 3 + 3) * 2 = 18 процессов, если ни один из fork () не завершится неудачей.

...