Прежде всего, лучше сначала запустить все дочерние процессы, а затем ждать их все, а не ждать каждого из них последовательно.
Кроме того, дочерние процессы должны немедленно завершиться и не продолжать работу раздвоенный код.
В-третьих, вы должны обратить внимание и дождаться всех детей после l oop, а не только первого, заканчивающегося:
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
for (int i=0; i<3; i++) {
pid_t child = fork();
if (child > 0) {
printf("Child %d created\n", child);
}
else if (child == 0) {
printf("In child %d. Bye bye\n", i);
return 0; // exit the child process
}
}
while (wait(NULL) > 0); // wait for all child processes
printf("Parent terminated\n");
return 0;
}
РЕДАКТИРОВАТЬ:
Код выше является просто улучшением по сравнению с примером, приведенным в вопросе. Чтобы реализовать поток информации от дочерних процессов к родительскому, можно создать канал (используя pipe()
), и дескриптор файла конца записи будет доступен из дочерних процессов.
Вот хороший пример для этого.