1

我正在使用 fork 制作流程树,代码如下:

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

int main () {


pid_t pid;
printf("Parent of all: %ld\n",(long)getpid());

pid = fork();

if(pid == -1){
   perror("fork failed");
   exit(EXIT_FAILURE);
}
else if (pid == 0){
   pid = fork();
   printf("Child with id: %ld and its Parent id: %ld \n", (long)getpid(),(long)getppid()); 

   if(pid > 0){
      pid = fork();
      printf("Child with id: %ld and its Parent id: %ld \n", (long)getpid(),(long)getppid());    
      _exit(EXIT_SUCCESS);
   }
}
else{
   int status;
   waitpid(pid, &status, 0);
}
   return EXIT_SUCCESS;
}

在线路传递给一个孩子之后else ifprintf所以我打印了两次相同的东西,你可以在这里看到结果结果我能以某种方式防止这种情况发生吗?

4

1 回答 1

4

当您调用 fork 时,父进程和子进程都将从同一点继续执行,这意味着它们都将执行printf("child with id...)

于 2018-05-10T19:22:02.673 回答