#c #linux
Добрый вечер. Подскажите как правильно выполнить задачу?
Необходимо создать цепочку из 5 последовательно запущенных процессов, когда каждый
дочерний процесс становится родителем для следующего потомка. Код завершения последнего
потомка передать первому процессу. В первом процессе вывести данное число на экран.
Создал в цикле 5 процессов:
pid_t return_value;
for(int i = 0; i < 5; i++)
{
return_value = fork();
printf("%s %d %s %d\n", "Процесс: ", getpid(), "PID: ", return_value);
}
return 0;
Данный код выдает мне в терминале огромную простыню,
Я так понимаю что это из-за того, что после создания нового процесса они продолжают
выполняться параллельно. Как код завершения последнего потомка передать первому процессу
так и не выяснил. Подскажите как правильно сделать?
Ответы
Ответ 1
Надеюсь, Вы уже сами успешно решили свою задачку, но на всякий случай вот простой код. #include#include #include #include int main (int ac, char *av[]) { int n = 5, s; srand(getpid()); while (n--) if (fork()) break; if (n < 0) { // last child s = rand() % 100; printf("child %d exit rc: %d\n", (int)getpid(), s); exit(s); } wait(&s); if (n != 4) // all except first exit(WEXITSTATUS(s)); printf("Grandfather %d: child exited: %d\n", (int)getpid(), WEXITSTATUS(s)); return puts("End") == EOF; } Т.е. делаем цикл по переменной (в коде -- n), которая наследуется новым процессом и в нем запускаем новый процесс. Родитель выходит из цикла, ждет завершения потомка (тот в свою очередь ждет завершения своего потомка и так 5 раз). Если это не прародитель (определяем по n), то выходим с кодом завершения потомка, который получили в wait(). (без pipe передать PID последнего процесса в первый не получится (конечно, кроме разделяемой памяти или файла), но это мы с Вами вроде уже обсуждали).
Комментариев нет:
Отправить комментарий