如何创建 child child?

How can I create a child child?

如何创建 child 的 child 的 child?我怎么能这样做10次。在下面的代码中,固定 parent 并形成 children。我怎样才能保证child是我想要的child呢?

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main() 
{ 
    for(int i=0;i<5;i++) // loop will run n times (n=5) 
    { 
        if(fork() == 0) 
        { 
            printf("[son] pid %d from [parent] pid %d\n",getpid(),getppid()); 
            exit(0); 
        }else{
        printf("parrent");
        }
    } 
    for(int i=0;i<5;i++) // loop will run n times (n=5) 
    wait(NULL); 

}

以下应作为您尝试执行的操作的基本示例:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int nSubprocess_count = 0;
int nFork_result;

int main() 
  { 
  nFork_result = fork();
  while(nFork_result == 0)
    {
    printf("child %d from parent %d\n", getpid(), getppid()); 

    nSubprocess_count += 1;

    if(nSubprocess_count < 10)
      nFork_result = fork();
    else
      break;
    }

  if(nFork_result != 0)
    printf("parent %d\n", getpid());

  sleep(5);
  }

当 运行 这会产生类似于以下的输出:

parent 4522
child 4523 from parent 4522
parent 4523
child 4524 from parent 4523
parent 4524
child 4525 from parent 4524
parent 4525
child 4526 from parent 4525
parent 4526
child 4527 from parent 4526
parent 4527
child 4528 from parent 4527
parent 4528
child 4529 from parent 4528
parent 4529
child 4530 from parent 4529
parent 4530
child 4531 from parent 4530
parent 4531
child 4532 from parent 4531

如您所见,每个子进程都会派生一个额外的子进程。

OnlineGDB here