进程学习6--waitpid与wait差别

概述

(1)基本功能一样,都是用来回收子进程
(2)waitpid可以回收指定PID的子进程
(3)waitpid可以阻塞式或非阻塞式两种工作模式,wait只能是阻塞式工作模式

正文

函数

函数原型waitpid

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

参数

参数pid表示要回收的PID号(-1表示不指定pid号)
参数status为子进程返回值
参数options表示可选项(0:默认阻塞式)
WNOHANG 非阻塞模式

返回值

回收的pid号,
-1表示pid号是错的
0表示在非阻塞式下没有回收

测试代码

int main(void)
{
    pid_t Mypid  =-1;

    Mypid = fork();
    if(Mypid>0)/*父进程*/
    {
        pid_t Mypid2 = -1;
        int status = -1;

        Mypid2 = waitpid(Mypid,&status,0);/*0为默认阻塞*/
        printf("son is recycled Mypid2 = %d\r\n",Mypid2);
        printf("exit true? %d\n", WIFEXITED(status));
        printf("exit false? %d\n", WIFSIGNALED(status));
        printf("exit val %d.\n", WEXITSTATUS(status));
    }
    else if(Mypid == 0)/*子进程*/
    {
        printf("son progress.Mypid = %d\r\n",getpid());
        return 22;
    }

    return 0;
}
/************运行结果****************
    son progress.Mypid = 10652
    son is recycled Mypid2 = 10652
    exit true? 1
    exit false? 0
    exit val 22.
************************************/

参考

朱友鹏Linux学习教程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值