进程等待!

一.进程等待的意义

1.不等待会有僵尸问题,此时僵尸进程无法被kill杀死,也无法进行资源回收,甚至有可能造成资源泄露。

2.父进程只是让子进程执行某个任务,执行结果如何父进程不知道

进程等待意义:回收资源并获取子进程执行信息

二.wait与waitpid

1.头文件与函数参数

#include<sys/types.h>

#include<sys/wait.h>

pid_t wait(int* status);

pid_t waitpid(pid_t pid,int* status,int options);

waitpid函数参数及返回值含义:

(1)参数1:pid_t pid

等待的进程标识符号

-1表示等待任意进程

(2)参数2:int* status

详见进程终止进程终止(错误码与终止信号)-CSDN博客

status是输出型参数:0~7bit位表示终止信号 8~15bit位表示错误码

(3)参数3:int options

进程等待方式:

0:阻塞等待

WNOHANG:非阻塞等待

(4)进程返回值pid_t含义

返回值>0:进程等待成功,回收子进程资源成功,返回子进程的pid

返回值==0:WNOHANG时才会返回0,子进程访问成功,但是子进程没有结束

返回值<0:进程等待失败,例如参数1:pid_t pid填错填写了一个不存在的子进程

2.阻塞等待

waitpid死等子进程,子进程不结束,父进程就一直等着

int status
pid_t rid = waitpid(-1,&status,0);
printf("haha\n");

子进程不结束,waitpid就不会结束,haha就不会打印

3.非阻塞轮询等待

waitpid只查一下子进程状态,不死等

int status
while(1)
{
    pid_t rid = waitpid(-1,&status,WNOHANG);
    if(rid  > 0)
    {
        //等待成功,子进程结束
        break;
    }
    else if(rid  == 0)//等待成功,子进程没结束
    {
        //等待成功
        break;
    }
    else
    {
        //等待失败
        break;
    }
    printf("haha\n");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值