头文件
#include<sys/wait.h>函数原型
pid_t wait(int *status) //status就是用来间接记录子进程的退出值的。返回值:
执行成功:退出的子进程的pid失败:-1处理子进程退出状态值的宏
WIFEXITED(status):若子进程正常退出,则该宏为正。WEXITSTATUS(status):若子进程正常退出,则该宏获取子进程的退出值。测试程序1
#include<stdio.h> #include<sys/wait.h> #include<sys/types.h> #include<unistd.h> #include<stdlib.h> int main() { pid_t res; int status; res = fork(); if(-1 == res) { printf("error!\n"); } else if(0 == res) { printf("son\n"); exit(0); } else { wait(&status); //父进程调用wait()之后,接下来的代码不会被执行,一直等到 //它的子进程(也就是上面的分支)退出后,才会继续执行。 if(1 == WIFEXITED(status)) { printf("exit value:%d\n",WEXITSTATUS(status)); } return 0; } }编译、执行结果
jl@jl-virtual-machine:~/test$ jl@jl-virtual-machine:~/test$ gcc wait.c jl@jl-virtual-machine:~/test$ ./a.out son exit value:0 jl@jl-virtual-machine:~/test$如果你把子进程的退出值设置为任意值,如 exit(123),那么父进程获取并打印的值就是123。 一般很少在主函数中调用 wait() 来获取子进程的返回值,这样会造成阻塞。常用的方法是在子进程返回时向main发送信号,并传递值。
