wait和waitpid

1 wait

1 头文件

<sys/types.h>

<sys/wait.h>

2 调用

pid_t pid = wait(&status);

3 返回值

pid_t: 成功时返回回收的进程pid,设置status,回收进程的状态,可用于判断进程是如何退出的。失败返回-1,并且设置errno。

4 功能作用

  • 阻塞等待子进程退出
  • 清理子进程残留在内核的 pcb 资源
  • 通过传出参数,得到子进程结束状态

5 status值

1 获取子进程正常终止值:

WIFEXITED(status) --> 为真 -->调用 WEXITSTATUS(status) --> 得到 子进程 退出值。

2 获取导致子进程异常终止信号:

WIFSIGNALED(status) --> 为真 -->调用 WTERMSIG(status) --> 得到 导致子进程异常终止的信号编号。

2 waitpid

1 调用

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

2 参数

1 pid_t pid: 

  • -1 < : 可指定回收同组的子进程,使用绝对值取值方式对同组的进程进行回收。
  • -1 : 回收任意一个子进程
  • 0 : 回收和回收者进程相同组的任意同组子进程
  • 0 > : 回收指定的任意子进程

2 int* status:返回进程回收的状态,可以通过状态判断进程结束的情况,例如退出方式。

3 int option:

  • WNOHANG: 非阻塞方式回收子进程,没有子进程退出,直接返回。
  • WUNTRACED: 如果子进程已停止(但未通过ptrace(2)跟踪),也会返回
  • WCONTINUED: 如果已通过传递SIGCONT恢复了停止的子项,也会返回。

3 返回值

pid_t: 成功时返回回收的进程pid,设置status,回收进程的状态,可用于判断进程是如何退出的。失败返回-1,并且设置errno。返回0 : 函数调用时, 参3指定了WNOHANG, 并且,没有子进程结束。

3 总结

wait 和 waitpid 都可以对进程进行回收,但是一次只能够回收一个子进程。要回收多个子进程,还需要多次调用进行回收。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值