回收子进程函数--wait、waitpid

wait回收子进程

函数原型
int status;
pid wait(&status);

功能

  1. 阻塞等待子进程
  2. 回收子进程资源
  3. 返回子进程结束状态

参数
status为传出参数,保存子进程结束的信息(结束的原因,例如正常结束、异常中断…)

返回值
回收成功返回进程pid,失败返回-1

关于wait函数的补充
有以下几个宏函数

  1. int WIFEXITED(int status)若返回值非0,即正常退出
    WEXITSTATUS(int status)若上函数非0,即子进程正常结束–>获取进程退出状态(exit的参数)
  2. int WIFSIGNALED(int status) 若返回值非0,即异常退出
    WTERMSIG(int status) 若上函数非0,即子进程异常退出–>获取异常退出状态(kill -l可以查看到所有中断状态)
  3. WSTOPPED(int status)若返回值非0,即进程处于暂停状态
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main(void)
{
        pid_t pid,wpid;
        int status;
        pid = fork();
        if(pid==0){

                printf("----child, my parent = %d, going to sleep\n",getppid());
                sleep(10);
                printf("--------child die---------------\n");
        }else if(pid>0){
                //sleep(2);
                wpid=wait(&status);
                if(wpid==-1){
                        perror("wait error:");
                        exit(1);
                }else{
                        if(WIFEXITED(status)) printf("child exits with:%d\n",WEXITSTATUS(status));
                        if(WIFSIGNALED(status)) printf("child was killed with:%d\n", WTERMSIG(status));
                }

                printf("I'm parent, my pid =%d\n",getpid());

        }
        return 0;
}
                                                                                                 

waitpid函数

函数原型
waitpid(int pid, int status, int option)

参数

  1. pid:> 0,指定pid回收
    = -1,回收任意子进程
    = 0,回收本组任意子进程
    < -1,回收该进程组的任意子进程
  2. status:同wait函数
  3. option:= 0,阻塞回收(跟wait一样)
    WNOHANG,非阻塞回收

返回值
回收成功返回pid,失败-1
option为WNOHANG,且子进程未结束时返回0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值