Учитывая этот код
pid[k]=fork();
if(!pid[k])
execvp(.....);
и чтение the man page of fork в котором говорится, что
В случае успеха, PID дочернего процесса возвращается в родителе, и 0 возвращается в дочернем ,
Мы знаем, что дочерний процесс выполнит вызов exec (и продолжит выполнение другой программы), тогда как родитель будет зацикливаться и создать другого ребенка.
Это означает, что ребенок будет создан для каждой итерации цикла, в этом случае 10 раз. Таким образом, ответ 10 детей + 1 родитель = 11.
Теперь, если программа, которая запускается с помощью Exec это та же программа, удовольствие остановится только тогда, когда память компьютера исчерпывается: на каждой итерации 10 программ будут создавать 10 детей, каждая из которых будет создавать 10 детей и т. Д. Особенность fork() заключается в том, что родитель и ребенок получают изображение с теми же переменными (что приведет к предсказуемому числу детей, то есть к какой-то цифре, связанной с силой 2), очевидно, это неверно, когда программа получает exec'd, что означает, что доступная память будет единственным ограничением.
Является ли программа, выполняемая execvp этой же программой или чем-то несвязанным? Это также может помочь узнать, почему вы считаете, что 1024 - правильный ответ (т. Е. Объяснить ваши рассуждения). – fvu
Я думаю, что ребенок заменяется другой программой.? – Garrick
Ну, в этом случае дочерние процессы не будут участвовать в дальнейшем разветвлении, что приведет к 10 детям и одному из родителей, нет? Кроме того, 2^10-1 определенно не 1024 ... – fvu