目录
上篇进程等待我们介绍到怎样去进程等待。我们介绍了wait函数&阻塞等待。本篇我们将介绍waitpid函数的参数pid和status。
waitpid
- man 2 waitpid
- 等待一个进程的状态发生变化
- pit_t pid是父进程等待的子进程的pid,情况有3种,这里介绍两种情况。
- int *status是NULL
- int options是0
- 先把后面两个参数设置为NULL和0
pid_ t waitpid(pid_t pid, int *status, int options);
返回值:
- 当正常返回的时候waitpid返回收集到的子进程的进程ID;
- 如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集,则返回0;
- 如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在;
参数:
pid:
- Pid=-1,等待任一个子进程。与wait等效。
- Pid>0.等待其进程ID与pid相等的子进程。
status:
- WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。(查看进程是否是正常退出)
- WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。(查看进程的退出码)
options:
- WNOHANG: 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。若正常结束,则返回该子进程的ID。
waitpid
是一个在Unix和类Unix系统(如Linux)中常用的系统调用,用于等待一个或多个子进程的状态改变。与wait
系统调用相比,waitpid
提供了更多的灵活性,因为它允许你指定要等待的子进程的PID(进程ID),并可以设置等待的模式(阻塞或非阻塞)。以下是
waitpid
函数的原型和参数详解:
pid_t waitpid(pid_t pid, int *status, int options);
pid
:这是一个整数,用于指定要等待的子进程的PID。其取值有以下几种情况:
pid > 0
:等待指定PID为pid
的子进程。pid = 0
:等待当前进程组中的任何子进程。pid = -1
:等待任何子进程,与wait
函数的功能相同。pid < -1
:等待组ID为-pid
的任意子进程。status
:这是一个指向整数的指针,用于存储子进程的退出状态。如果不需要这些信息,可以将此参数设置为NULL。options
:这是一个位掩码,用于修改waitpid
的行为。常见的选项有:
WNOHANG
:使waitpid
调用变为非阻塞。如果没有子进程满足条件,waitpid
会立即返回。WUNTRACED
:当子进程被停止时(而不是退出时),也返回它的状态。这通常与跟踪被调试的子进程有关。WCONTINUED
:当被停止的子进程恢复时,返回它的状态。
waitpid
的返回值有以下几种情况:
- 如果成功,返回收集到的子进程的PID。
- 如果设置了
WNOHANG
选项并且没有子进程满足条件,返回0。- 如果在调用中出现错误,返回-1,并设置全局变量
errno
以指示错误。
waitpid
是一个非常有用的工具,允许你更精细地控制和管理你的子进程。