我不知道该怎么解决。我需要在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

最佳答案

看起来应该这样做:

#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,并与他们的父母一起打印出来,这样您就可以看到它。

关于c - 在C语言中使用fork()创建特定的进程树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24071471/

10-11 19:42