0

分叉 2 个孩子的 ac 程序,第一个休眠 10 秒,第二个等待第一个孩子退出并打印相关消息,父母等待 2 个孩子的终止,我不知道为什么第二个孩子不等待第一个孩子终止。请帮助

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

main(){
    int status;
        pid_t child1, child2,ret,ret2;

    child1=fork();
    if(child1==0){
        //this branch of code is being executed by the child1 process

        printf("I'm the first child with %d, I sleep for 10 sec \n",getpid());
        sleep(10);
        printf("child1 pid %d exiting\n",getpid());
                exit(1);
    }
    if(child1>0){

        child2=fork();
        ret=waitpid(child1,&status,0);


        if(child2==0){

             wait(&status);//???why child2 does not wait the child1 exit?

            printf("I'm the second child with %d, I have waited for the termination of the first child\n",getpid());
                        printf("child2 exited\n");
                        exit(1);

        }
        if(child2>0){


                        printf("father of child2 is waiting\n");
            ret2=waitpid(child2,&status,0);
            printf("I'm the father, my terminated process id is: %d \n",getpid());
            printf("I'm the father, my first child's id is: %d\n", child1);
            printf("I'm tha father, my second child's id is: %d\n", child2);

        }


    }

return 0;
}
4

3 回答 3

4

函数族wait只能由父母使用来等待孩子。进程不能使用它们来等待兄弟姐妹。

于 2013-01-19T21:05:22.517 回答
3

一个进程只能wait用于它的直接子级。在这种情况下,这意味着父进程必须wait为 child1 和 child2 执行此操作。

于 2013-01-19T21:04:38.400 回答
0

在进程层次结构中,子级既不等待父级,也不等待另一个子级。您可以使用某种形式的 IPC 机制将信息从一个孩子传递给另一个孩子,

于 2013-01-24T12:01:10.933 回答