alex5e
@alex5e

Как последовательно запустить несколько процессов, а код завершения последнего потомка передать первому процессу?

Добрый вечер. Подскажите как правильно выполнить задачу?
Необходимо создать цепочку из 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;

Данный код выдает мне в терминале огромную простыню,
e2151b60c6034deca6b03100d03ac082.png
Я так понимаю что это из-за того, что после создания нового процесса они продолжают выполняться параллельно. Как код завершения последнего потомка передать первому процессу так и не выяснил. Подскажите как правильно сделать?
  • Вопрос задан
  • 376 просмотров
Решения вопроса 1
@werktone
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(void) {
    pid_t root_pid = getpid();
    
    for (int i = 0; i < 5; ++i) {
        if (fork() != 0) {
            int status;
            wait(&status);
            int exit_status = WEXITSTATUS(status);
            if (root_pid == getpid()) {
                printf("%d\n", exit_status);
                return 0;
            } else {
                return exit_status;
            }
        }
    }
    return 28;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Этот код создаёт не 5, а намного больше процессов. Порождённые процессы форкаются дальше, а те свою очередь опять, пока не отработают свою копию цикла.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы