Linux中fork的使用(04)---wait模型

来源:互联网 发布:淘宝怎么设置2件包邮 编辑:程序博客网 时间:2024/06/06 12:48

环境:Vmware Workstation;CentOS-6.4-x86_64

wait说明:

1、进程一旦调用了wait,就立即阻塞自己。

2、wait会收集僵尸进程的信息,并把僵尸进程销毁后返回。

3、wait函数的定义形式:pid_t wait(int *status)

4、参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。

5、WIFEXITED(status)如果子进程正常结束则为非0值。

6、WEXITSTATUS(status)取得子进程exit()返回的结束代码。

7、一般会先用WIFEXITED 来判断是否正常结束才能使用WEXITSTATUS(status)

下面是一个wait模型,代码要特别注意:

#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>#include <stdlib.h>#include <string.h>#include <errno.h>int main(int argc, char *args[]){// 定义一个状态变量int status = 0;// 执行fork函数pid_t id = fork();// 判断是否fork成功if (id == -1){// 输出fork信息printf("Fork failed : %s\n", strerror(errno));}if (id > 0) // 执行父进程{// 调用wait函数,阻塞主进程wait(&status);// 判断子进程是否正常终止if (WIFEXITED(status) != 0){// 得到子进程的退出码printf("exit num : %d\n", WEXITSTATUS(status));}}else // 执行子进程{// 子进程休眠5秒后退出sleep(5);// 打印退出提示信息printf("son exit.\n");// 退出子进程,退出码为10exit(10);}return 0;}

编译并执行程序:

[negivup@negivup mycode]$ gcc -o main main.c[negivup@negivup mycode]$ mainson exit.exit num : 10

注意:在使用WEXITSTATUS(status)的时候,要先判断子进程是否是正常退出,使用WIFEXITED(status)判断。


PS:根据传智播客视频学习整理得出。

0 0
原创粉丝点击