Дублируйте printf при разветвлении - PullRequest
0 голосов
/ 10 мая 2018

Я использую 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 if строка printf переходит к ребенку, так что я получаю одно и то же дважды, как вы можете видеть в результатах здесь результаты Могу ли я как-то предотвратить это?

1 Ответ

0 голосов
/ 10 мая 2018

Когда вы вызываете fork, родительский и дочерний процессы будут продолжать выполняться с одной и той же точки, что означает, что они оба выполнят printf("child with id...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...