#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 последнего процесса в первый не получится (конечно, кроме разделяемой памяти или файла), но это мы с Вами вроде уже обсуждали).
Комментариев нет:
Отправить комментарий