Согласно учебнику, который я читаю, приведенный ниже код создает N дочерних процессов, которые будут выходить с уникальными статусами.C: fork() дочерние процессы
/* Parent creates N children */
for (i = 0; i < N; i++)
if ((pid[i] = Fork()) == 0) /* Child */
exit(100+i);
Ранее в учебнике говорится, что следующий код будет иметь 8 строк вывода:
int main(){
Fork();
Fork();
Fork();
printf("hello\n");
exit(0);
}
Это приводит меня к мысли, что есть 2^п дочерние процессы, где п является количество раз для fork(). Причина в том, что первый код генерирует только N дочерних процессов (в отличие от 2^N), потому что ребенок выходит каждый раз, поэтому к тому времени, когда вызывается последующий fork(), он действует только на родительский процесс?
во втором случае все дети продолжают разворачивать и печатать. В первом случае ребенок выходит, как только он создается, так что только родитель продолжает –
@JerryJeremiah Спасибо! Это отвечает на мой вопрос! –
Возможно, вам стоит упомянуть, какую книгу вы используете. Я знаю, что Стивенс «Сетевое программирование UNIX» использует имена системных вызовов начального капитала, чтобы указать версии системных вызовов с проверкой ошибок. –