Как я могу создать дерево процессов в C
У меня есть этот массив чисел, который говорит, сколько дочерних процессов должен сделать каждый родитель, а точнее, какова структура дерева.
Например, если массив содержит 1 4 0 0 3, то дерево процессов выглядит так: http://shrani.si/f/S/IW/8HrGEVJ/proctree.jpg
Я думаю, что это может быть решено с помощью рекурсии, но я не знаю, как прочитать массив и определить, где и сколько дочерних процедур мне нужно разветвить. Кроме того, как вы создаете больше потомков от одного родителя, если ваш шаблон кода выглядит так:
void recTreeProc(){
/* create process */
pid_t pid;
pid = fork();
if (pid == -1) {
/* error */
perror("fork failed");
exit(EXIT_FAILURE);
}
else if (pid == 0) {
/* child process */
//call recursion?
}
else {
/* parent process */
//wait for all the children to execute
int status;
(void)waitpid(pid, &status, 0);
}
}
1 ответ
Я не могу помочь вам с кодом для реализации дерева и массива, потому что я не понял, что означают значения, но для нескольких потомков вы можете попробовать это:
void recTreeProc() {
/* create process */
pid_t pid;
int n = 0;
int cpid[CHILD_NB];
do {
pid = fork();
if (pid == -1) {
perror("fork failed");
exit(EXIT_FAILURE);
}
else if (pid) {
cpid[n];
}
n++;
} while(n < CHILD_NB && pid); // I want CHILD_NB childs
if (!pid) {
/* childs */
}
else {
/* parent process */
//wait for all the children to execute
int status[CHILD_NB];
n = 0;
while (n < CHILD_NB) {
(void)waitpid(cpid[n], &status[n], 0);
n++;
}
}
}