wait 与 waitpid

两个函数的原型: 

pid_t wait(int *statloc)
pid_t waitpid(pid_t pid,int *statloc,int options)

功能:当子进程终止时返回,主要用来处理已终止的子进程。当子进程处理完任务后,处于僵死状态,也就成为了僵死进程,父类可以通过上面两个函数捕获到,从而处理掉僵死进程,归还内存、CPU等资源。


提问:如果父进程没有处理,放任僵死进程横行,最后父进程消亡了怎么办?

答: 父进程消亡了,子进程就变成了孤儿进程,将孤儿进程的父进程id设置为1,也就是init进程,最后由init进程处理这些僵死的孤儿进程。

函数wait 

有两个返回参数,直接返回的pid_t 是已经返回的子进程ID(如果错误返回0或者-1),statloc子进程终止状态,可由终止状态知道子进程的死因(正常死亡、由信号杀死、任务作业控制停止)。

wait 是阻塞的,如果调用wait的进程没有子进程终止,不过有一个或者多个子进程在运行,那么wait将阻塞到第一个子进程终止为止。


函数waitpid

有两个输入参数和两个返回值。返回值与wait的返回相同。
两个输入参数:
pid_t pid:   可以用于指定调用waitpid的进程的在等待特定子进程返回。如果pid = -1,表示第一个返回的子进程。
options:     允许我们制定附加选项,如WNOHANG,告诉内核在没有子进程终止时,不阻塞。

waitpid是不阻塞的,当pid = -1时,与wait相同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值