Как я могу создать дерево процессов в 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++;
        }
  }
}
Другие вопросы по тегам