进程的等待(wait和waitpid)

1.进程的等待
wait函数或waitpid进程可能发生如下情况;
(1)如果所有的子进程孩子运行,则阻塞(Block)
(2)如果一个子进程已经终止,正等待父进程获取其终止状态,则取得孩子进程的终止状态返回
(3)如果她没有任何子进程,则立即出错返回

函数的原型:
#include <sys/wait.h>
pid_t wait(int *status);
说明:wait函数会暂时停止目前进程执行,直到有信号来到或者子进程结束。如果在调用wait时,子进程已经结束,则wait会立即返回子进程的结束状态值。如果不在意子进程的返回状态,可将参数status设为NULL。若成功返回子进程识别码(PID),若有错误发生则返回-1.


pid_t waitpid(pid_t pid,int *status,int options);
说明:
返回值:若成功返回进程ID,若出错返回-1.waitpid会暂停目前的进程执行,直到有信号或者子进程结束。
如果不在意结束时状态值,则status可以设成NULL.参数pid为欲等待的子进程识别码,其他值意义如下:
(1)pid < -1 等待进程组识别码为pid绝对值的任何子进程
(2)pid = -1等待任何子进程,此时就相当于wait()
(3)pid = 0等待进程组识别码与目前进程相同的任何子进程
(4)pid > 0等待任何子进程识别码为pid的子进程

参数options可以设为0 或者与下面的组合:
(1)WNOHANG 若没有任何已经结束的子进程则马上返回,不等待
(2)WUNTRACED如果子进程进入暂停执行情况马上返回,但结束的状态不予理会




2.wait和waitpid的区别:
(1)在任何一个子进程终止前,wait使其调用者阻塞,而waitpid有一个选项,可以使调用者不阻塞。
(2)waitpid并不等待在其调用之后的第一个终止的子进程。它若有若干个选项,可以控制它所等待的进程。如果一个子进程已经终止,并且是僵死进程,wait函数立即返回并取得该子进程的状态,否则wait使其调用者阻塞直到一个子进程终止。如果调用者阻塞并有多个子进程时,则在一个子进程终止时,wait立即返回,因为wait返回终止子进程的ID。

僵死进程:一个已经终止,但是父进程尚未对其进行善后处理(获得终止子进程的有关信息,并且释放资源)的进程被称为僵死进程。



例子参看linux代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShaYQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值