Попытка написать простую программу, которая использует pipe/fork для создания/управления 1 родительским и 4-мя процессами. Предполагается, что родительский процесс отобразит главное меню.Настройка четырех процессов с помощью fork() с использованием 1 трубы
Main Menu:
1. Display children states
2. Kill a child
3. Signal a child
4. Reap a child
5. Kill and reap all children
Код, который я пишу сейчас, должен создать 4 дочерних процесса. Я не уверен, правильно ли я настроил четыре дочерних процесса. Я понимаю, что fork возвращает 0 ребенку и PID родительскому. Как получить доступ к родительскому элементу для этих значений PID? Где именно я настраиваю меню для родительского процесса?
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#define BUFSIZE 1024
#define KIDS 4
main()
{
//create unnamed pipe
int fd[2];
char buf[BUFSIZE];
if (pipe(fd) < 0)
{
perror("pipe failed");
exit (1);
}
//array of child pids
size_t child_pid[4];
//create 4 proccesses
int i = 0;
for (i = 0; i < KIDS; i++) {
child_pid[i] = fork();
if (child_pid[i]) {
continue;
} else if (child_pid[i] == 0) {
close(fd[0]);
printf("Child %d: pid: %zu", i+1, child_pid[i]);
break;
} else {
printf("fork error\n");
exit(1);
}
}
}
Мой вывод:
Child 1: pid: 0
Child 2: pid: 0
Child 3: pid: 0
Child 4: pid: 0
Возможно, вы имели в виду ошибку? Сколько раз это цикл? и где это объявлено «pid»? – artsylar
Извините, что я менялся вокруг этой петли так, что я испортил это, это должно быть child_pid [i]. Я редактирую вывод, который я получаю. – tdwig
'printf (« Child% d: pid:% zu », i + 1, child_pid [i]);' работает отлично. Он выполняется только тогда, когда 'child_pid [i] == 0', и это именно то, что он делает (т. Е. Печатает нуль). Ошибка в вашей концепции. – sokin