С в Linux

Модераторы: Romeo, Hawk, Absurd, WinMain, DeeJayC

Ответить
Иван Петров12
Сообщения: 1
Зарегистрирован: 11 апр 2018, 18:40

11 апр 2018, 18:45

Процесс 1 порождает 7 потомков. Три из них делают, какое то действие, неважно какое
Помогите исправить

Код: Выделить всё

#include <sys/types.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>     
#include <stdlib.h>     
void main(void)
{ int pid2, pid3, st; 
printf("Process 1, pid = %d:\n", getpid());
pid2 = fork();
if (pid2 == 0) 
{ printf("Process 2, pid = %d:\n", getpid());
pid3 = fork();
if (pid3 == 0) 
{ printf("Process 3, pid = %d:\n", getpid());
sleep(2);
printf("Process 3: end\n");
} 
if (pid3 < 0) printf("Cann't create process 3: error %d\n", pid3);
wait(&st);
printf("Process 2: end\n");
}
else 
{ if (pid2 < 0) printf("Cann't create process 2: error %d\n", pid2);
wait(&st);
printf("Process 1: end\n");
}
exit(0);     
}
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

11 апр 2018, 20:01

Судя по заданию, дочерние процессы должен порождать только главный процесс, дочерние процессы не должны порождать поддочерние процессы. Значит все порождения должны происходить в том случае, если первый fork был > 0. Ну и в количестве вызовов fork здесь тоже как бы нехватка. Их должно быть всего 7 штук: один сразу и ещё 6 внутри проверки, что первый возвращённый был > 0.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить