使用C中的fork()创建特定的进程树

时间:2014-06-05 22:50:18

标签: c linux bash tree

我不知道如何解决这个问题。我需要在C中使用fork()ifelse制作流程树。 树需要看起来像这样:

a.out---a.out---a.out
     | 
     |--a.out---a.out---a.out
     |
     |--a.out---a.out---a.out
     |
     |--a.out

我已经有了这个:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


int main (void){
    if(fork()){
        if(fork()){}          
        else{}
        if(fork()){}
        else{fork();}
    }
    else{}

    pause();
    return 0;
}    

将创建一个如下所示的进程树:

a.out---a.out
     | 
     |--a.out---a.out---a.out
     |
     |--a.out---a.out

1 个答案:

答案 0 :(得分:0)

这看起来应该这样做:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
   if (fork()) {
      // parent
      if (fork()) {
         // parent
         if (fork()) {
            // parent
            if (fork()) {
               // parent
            }
            else {
               // child 4
            }
         }
         else {
            // child 3
            if (fork()) {
               // child 3
            }
            else {
               // child 1 of child 3
               if (fork()) {
                  // child 1 of child 3
               }
               else {
                  // grandchild 1 of child 3
               }
            }
         }
      }
      else {
         // child 2
         if (fork()) {
            // child 2
         }
         else {
            // child 1 of child 2
            if (fork()) {
               // child 1 of child 2
            }
            else {
               // grandchild 1 of child 2
            }
         }
      }
   }
   else {
      // child 1
      if (fork()) {
         // child 1
      }
      else {
         // child 1 of child 1
      }
   }

   pause();
   return 0;
}

理想情况下,您可以添加一些存储各种PID的变量,并与父母一起打印出来,这样您就可以看到它。