waitpid案例

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值