wait and waitpid

本文详细介绍了进程等待函数wait和waitpid的使用方法及区别,并进一步解释了waitid函数的特点。包括如何通过不同参数设置来控制等待行为,以及如何获取子进程的状态信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

wait, waitpid, waitid - wait for process to change state

#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
//Both return: process ID if OK, 0 (see later), or -1 on error

wait和waitpid区别

  • wait会阻塞直到子进程中止。waitpid能有option能防止阻塞
  • waitpid不等待第一个中止的childprocess,有相应option控制等待哪个进程

status如果不是NULL指针,返回的状态保存在里面

sys/wait.h 定义了如下macro(宏)查看中止状态
figure 8.4

参数pid的四种value

  1. pid = -1, 等待任何子进程。在这种情况下waitpid等于wait
  2. pid > 0, 等待进程ID等于pid的子进程
  3. pid == 0, 等待任何进程组ID等于调用进程的(process group id)的进程
  4. pid < -1, 等待任何进程组ID(process group id)等于pid绝对值的子进程

wait的注意点

  1. 真正的错误是调用者用没子进程
  2. 其余的错误返回是因为signal中断

waitpid的注意点

  1. 返回值是中止的子进程的进程ID
  2. 中止状态保存在status指向的参数里。
  3. 产生错误可能是因为指定的进程和进程组不存在,或者不是调用者的子进程

waitpid的options参数的作用

figure 8.7

waitpid提供了三个wait不具备的特性

  1. waitpid是我们等待一个特定的进程
  2. waitpid提供了无阻塞版本的wait
  3. waitpid使用WUNTRACEDWCONTINUED选项来支持job control

waitid

int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
//Returns: 0 if OK, -1 on error

特点:

  1. 和waitpid一样允许等待指定的子进程
  2. process IDprocess group ID 使用了分离的参数,而不是像waitpid和wait一样合成为一个参数。

参数说明

id参数的含义取决于idtype

idtype如下
figure 8.9

options决定调用者关心那些状态的改变

figure 8.10

infop是结构体siginfo的指针

该结构体包含了在子进程造成状态改变的信号的详细信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猎羽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值