Добрый вечер. Подскажите как правильно выполнить задачу?
Необходимо создать цепочку из 5 последовательно запущенных процессов, когда каждый дочерний процесс становится родителем для следующего потомка. Код завершения последнего потомка передать первому процессу. В первом процессе вывести данное число на экран.
Создал в цикле 5 процессов:
pid_t return_value;
for(int i = 0; i < 5; i++)
{
return_value = fork();
printf("%s %d %s %d
", "Процесс: ", getpid(), "PID: ", return_value);
}
return 0;
Данный код выдает мне в терминале огромную простыню,
Я так понимаю что это из-за того, что после создания нового процесса они продолжают выполняться параллельно. Как код завершения последнего потомка передать первому процессу так и не выяснил. Подскажите как правильно сделать?
Ответ
Надеюсь, Вы уже сами успешно решили свою задачку, но на всякий случай вот простой код.
#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
", (int)getpid(), s);
exit(s);
}
wait(&s);
if (n != 4) // all except first
exit(WEXITSTATUS(s));
printf("Grandfather %d: child exited: %d
", (int)getpid(), WEXITSTATUS(s));
return puts("End") == EOF;
}
Т.е. делаем цикл по переменной (в коде -- n), которая наследуется новым процессом и в нем запускаем новый процесс. Родитель выходит из цикла, ждет завершения потомка (тот в свою очередь ждет завершения своего потомка и так 5 раз). Если это не прародитель (определяем по n), то выходим с кодом завершения потомка, который получили в wait()
(без pipe передать PID последнего процесса в первый не получится (конечно, кроме разделяемой памяти или файла), но это мы с Вами вроде уже обсуждали).
Комментариев нет:
Отправить комментарий