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

在C中使用fork()创建特定的进程树,c,linux,bash,tree,C,Linux,Bash,Tree,我不知道怎么解决这个问题。我需要使用C中的fork()、if和else创建一个进程树。 树需要如下所示: a.out---a.out---a.out | |--a.out---a.out---a.out | |--a.out---a.out---a.out | |--a.out a.out---a.out | |--a.out---a.out---a.out | |--a.out---a.o

我不知道怎么解决这个问题。我需要使用C中的
fork()
if
else
创建一个进程树。 树需要如下所示:

a.out---a.out---a.out
     | 
     |--a.out---a.out---a.out
     |
     |--a.out---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;
}    

看起来它应该这样做:

#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;
}
#包括
#包括
#包括
int main(){
if(fork()){
//母公司
if(fork()){
//母公司
if(fork()){
//母公司
if(fork()){
//母公司
}
否则{
//儿童4
}
}
否则{
//儿童3
if(fork()){
//儿童3
}
否则{
//儿童1/3
if(fork()){
//儿童1/3
}
否则{
//孙子女1/3
}
}
}
}
否则{
//儿童2
if(fork()){
//儿童2
}
否则{
//儿童1/2
if(fork()){
//儿童1/2
}
否则{
//孙子女1/2
}
}
}
}
否则{
//儿童1
if(fork()){
//儿童1
}
否则{
//儿童1中的儿童1
}
}
暂停();
返回0;
}

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

您确定您的代码会生成第二棵树吗?图表是如何解释的?孩子们是水平的,垂直的,什么?@Duck,我相信两者都是。最上面的a.out有4个孩子,第一个有一个孩子,第二个和第三个孩子有一个孩子和孙子,第四个没有孩子。好的,这是有道理的。谢谢结果是:'a.out--a.out |--2*[a.out--a.out--a.out--a.out]|--a.out--a.out--a.out--a.out跟我需要的一样吗?