【问题标题】:How can I create proc tree in c如何在c中创建proc树
【发布时间】:2014-05-15 13:44:10
【问题描述】:

我有这个数字数组,它告诉每个父进程必须创建多少个子进程,或者更确切地说,树的结构是什么。

例如,如果数组包含 1 4 0 0 3,那么 proc 树看起来像这样 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);

    }

}

【问题讨论】:

  • 你的例子是不够的。根有一个孩子,那个节点有4个孩子,但是为什么3个孩子挂在第三个节点上?如果数组中的下一个整数是 2,那么 2 个子节点会位于具有 3 个子节点的节点的兄弟节点上,还是会是后代? (如果有标签就更容易讨论图表了!)
  • 0 0 3,表示这四个节点的第一个和第二个没有后代,第三个有三个

标签: c process tree proc


【解决方案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++;
        }
  }
}

【讨论】:

  • 谢谢。数字表示父母有多少孩子。根有一个节点,这个有 4 个子节点,前两个没有后代,第三个有 3 个,第四个没有
  • 我试图弄清楚如何用数组构建它,但是用一维数组它只是乱七八糟。或者你需要另一种格式,比如 char * 来解析;
  • 我试图弄清楚如何用数组构建它,但是使用一维数组它只是混乱,或者你需要让孩子真正靠近父母并且总是以 0 结尾,但仍然如此。或者你需要另一种格式,比如 char * 来解析; “1-4-0|0|3|0”,“-” = 孩子,“|” = bro' 更好的是 struct struct s_node { s_node *child, int child_number };
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2015-05-21
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多