首页 > 解决方案 > 如何使用 Fork() 只创建两个子进程,它们都有下两个子进程?

问题描述

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

    int main() {
      printf("Parent:my pid: %d my ppid: %d\n",getpid(),getppid() );


      pid_t pid0 = fork();

      if (pid0 == 0) {
        //child 1
        printf("child 1:my pid: %d my ppid: %d\n",getpid(),getppid() );
        pid_t pid2 = fork();
        if (pid2 == 0) {
          //child 11
          printf("child 11:my pid: %d my ppid: %d\n",getpid(),getppid() );
        }else if (pid2 > 0) {
          //child 1
          pid_t pid3 = fork();
          if (pid3 == 0) {
            //child 12
            printf("child 12:my pid: %d my ppid: %d\n",getpid(),getppid() );
          }else if (pid3 > 0) {
            //Child 1
          }else{
            fprintf(stderr, "Fork doesn't work\n" );
            return -1;
          }
        }else{
          fprintf(stderr, "Fork doesn't work\n" );
          return -1;
        }
      }else if (pid0 > 0) {
        //patent
        pid_t pid1 = fork();
        if (pid1 == 0) {
          //child 2
          printf("child 2:my pid: %d my ppid: %d\n",getpid(), getppid() );
          pid_t pid4 = fork();
          if (pid4 == 0) {
            //child 21
            printf("child 21 :my pid: %d my ppid: %d\n",getpid(),getppid() );
          }else if (pid4 > 0) {
            //child 2
            pid_t pid5 = fork();
            if (pid5 == 0) {
              //child 22
              printf("child 22 :my pid: %d my ppid: %d\n",getpid(),getppid() );
            }else if (pid5 > 0) {
              //child 2

            }else{
              fprintf(stderr, "Fork doesn't work\n" );
              return -1;
            }
          }else{
            fprintf(stderr, "Fork doesn't work\n" );
            return -1;
          }
        }else if (pid1 > 0) {
          //parent
        }else{
          fprintf(stderr, "Fork doesn't work\n" );
          return -1;
        }
      }else {
        fprintf(stderr, "Fork doesn't work\n" );
        return -1;
      }
      return 0;
    }

有没有办法从父进程中只创建两个子进程,而父进程都有下两个子进程?我尝试过这样的事情,但 PPID 与父母 PID 不正确。 这是一张照片 .................................................. ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................

标签: c

解决方案


推荐阅读