Предположим, у меня был следующий код:
pid_t pid0, pid1;
pid0 = fork();
if (!pid0) {
pid1 = fork();
if (!pid1) { // p2
/* do something */
return;
} else { // p1
wait(NULL);
printf("p1 done\n");
return;
}
}
// p0
wait(NULL):
printf("p0 done\n");
Является ли порядок операторов print детерминированным или он будет зависеть от воли ЦП?На практике это кажется одинаковым каждый раз, но документы для wait()
делают его случайным.
РЕДАКТИРОВАТЬ: я думал об этом еще немного, и мне интересно, всегда ли он в таком порядке, потому что p0 не имеет p2 как дочерний процесс;это ребенок p1.Таким образом, «p0 done» не будет печататься до тех пор, пока p1 не завершит ожидание своего потомка p2.Итак, я полагаю, что реальный вопрос заключается в том, ждет ли wait()
детей детей или просто перерабатывает одно "поколение"