waitpid案例
来源:互联网 发布:windows nt 4.0 安装 编辑:程序博客网 时间:2024/06/04 08:25
waitpid函数用来回收僵死的进程。
这个案例用父进程创建了N=2个子进程,用waitpid作为循环条件,等待所有的子进程终止,因为第一个参数是-1,所以waitpid的调用会阻塞,直道任意一个子进程终止,每个子进程终止的时候,waitpid都会调用并且返回,如果进程是正常终止的,在此是调用exit的函数终止的,父进程就提取退出状态并且把它输出,当回收了所有的子进程后,waitpid调用会返回-1。
#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<wait.h>#include<errno.h>#define N 2
/*pid_t waitpid(pid_t pid, int *status, int options);
正常情况返回终止的子进程号,如果等待的集合没有子进程被停止或已经终止,返回为0,或者等于那个被停止的或者已经终止的子进程的PID*/pid_t Fork(void){ pid_t pid; if((pid=fork())<0) { perror("Fork error"); } return pid;}int main(){ int status,i; pid_t pid; for(i=0;i<N;i++) if((pid=Fork())==0) exit(100+i);//父进程不会运行到这里 while((pid=waitpid(-1,&status,0))>0) { if(WIFEXITED(status)) printf("child %d terminated normally with exit status=%d\n", pid,WEXITSTATUS(status)); else printf("child %d,terminated abnormally \n",pid); } if(errno !=ECHILD) perror("waitpid error"); exit(0);}程序不会按照特定的顺序回收子进程,子进程的顺序是计算机的属性,如果想按照顺序回收可以把每个进程的PID号,依次存放在数组里面,然后在回收。
0 0
- waitpid案例
- waitpid案例2
- waitpid
- waitpid()
- waitpid
- waitpid
- waitpid
- waitpid
- waitpid
- waitpid()
- waitpid
- waitpid()
- waitpid()
- waitpid()
- waitpid
- waitpid
- waitpid
- waitpid
- Docker Security docker 容器安全
- 智能指针及其它
- android sdk更新失败Failed to create directory C:\ Program Files\Android\android-sdk\temp
- Flashtec NVRAM加速卡以次微秒级延迟实现一千五百万次 IOPS
- 配置oracle 11g数据遇到dim-00014: 无法打开windows nt服务控制管理器
- waitpid案例
- 【Linux笔记】samba源码安装及基本使用说明
- 背包——Bone Collect
- 文件下载--Struts2的中文文件下载显示为空格问题
- 苹果iOS 6悄然启用新型精准广告追踪技术
- nginx + uwsgi vs apache + wsgi
- From NJUPT to Oracle
- 毕业第一年
- POJ 2074 视线问题