2013-01-16 22 views
2

我试图从一个子进程的“兄弟”的退出状态获得,孩子进程是否可以等待它的兄弟进程,并获得退出状态?

我试着这样做:

int main(void){ 
    int i,j,status,p1; 
    pid_t pids[2],pid; 
    for (i = 0; i < 2; i++){ 
     pids[i]=fork(); 
    /*child 1*/ 
     if(pids[i]==0 && i==0)exit(5); 
    /*child 2*/ 
     else if(pids[i]==0 && i==1){ 
      waitpid(pids[0],&p1,0); 
      exit(WEXITSTATUS(p1)); 
     } 
    } 

    for(j=0;j<2;j++){ 
     pid = wait(&status); 
     if(pid==pids[0]){ 
      printf("child process 0 exit with status %d\n",WEXITSTATUS(status)); 
     } 
     else if(pid==pids[1]){ 
      printf("child process 1 exit with status %d\n",WEXITSTATUS(status)); 
     } 
    } 
    return 0; 
} 

但输出我得到的是:

child process 0 exit with status 5 
child process 1 exit with status 0 

有没有办法做到这一点?

+2

我认为你需要实现一些父级等待的机制,然后通过管道或其他东西将退出代码传递给其他孩子。 –

回答

3

不可以。您只能在您创建的进程中使用wait()