日期:2014-05-16  浏览次数:20762 次

子进程wait/waitpid//子进程不结束,父进程会等待子进程吗?
waitpid第三个参数什么意思?子进程exit是退出,用return什么作用?
C/C++ code

#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
    int pid1 = fork();
    int pid2;
    if(pid1>0) pid2 = fork();
    if(pid1==0){//子进程一
        printf("子进程一开始运行,马上睡5s\n");
        sleep(5);
        exit(123);
    }
    if(pid2==0){//子进程二
        printf("子进程二开始运行,马上睡3s\n");
        sleep(3);
        exit(234);
    }
    //以下是父进程
    printf("父进程开始等待子进程一\n");
    int r1 = 0;
    waitpid(pid1,&r1,0); 
    printf("父进程开始等待子进程二\n");
    int r2 = 0;
    waitpid(pid2,&r2,0);
    if(WIFEXITED(r1)){
        printf("子进程一的返回码:%d\n", WEXITSTATUS(r1));
    }
    if(WIFEXITED(r2)){
        printf("子进程一的返回码:%d\n", WEXITSTATUS(r2));
    }
}





------解决方案--------------------
你也可以使用别的选项,比如
waitpid( , , WNOHANG);

即使它的子进程当前还没有结束,这个waitpid也会立即返回,而不是阻塞等待