Вы должны обрабатывать дочерние процессы непосредственно в первом l oop:
for (int i = 0; i < 10; i++)
{
p[i] = fork();
if (p[i] == 0) {
p_child = getpid();
exit(p_child % 10);
} else if (p[i] == -1) {
perror("fork");
}
}
, а затем ждать их во втором l oop
for (int i = 0; i < 10; i++)
{
wait_p = wait(&status);
printf("Child with PID: %d", wait_p);
if (WIFEXITED(status))
printf(" terminated with STATUS: %d\n", WEXITSTATUS(status));
}
You не может обработать случай, который fork()
возвращает в дочернем процессе (с 0 в качестве возвращаемого значения), во втором l oop, в противном случае каждый дочерний процесс в первом l oop продолжает разветвлять больше дочерних процессов.