编译环境:Ubuntu 18.04
阻塞函数:pid_t wait(int *status)
1.阻塞并等待子进程退出
2.回收子进程残留资源
3.获取子进程结束状态(退出原因)
解除阻塞条件:有一个子进程死亡
返回值 = -1时:回收失败,没有子进程
返回值 > 0时:回收子进程对应的pid
传出参数:status
判断子进程如何死亡:(子进程的退出状态)
1.WIFEXITED(status):若非0,则正常退出,此时使用WEXITSTATUS(status)获取进程退出状态
2.WIFSIGNALED(status):若非0,则被信号杀死,此时使用WTERMSIG(status)取得使进程终止的信号的编号
调用一次只能回收一个子进程
mywait.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <sys/wait.h>
int main(int argc,char *argv[])
{
pid_t pid = fork();
if(pid > 0)//父进程
{
printf("parent pid = %d,ppid = %d\n",getpid(),getppid());
//回收子进程
int status;
pid_t wpid = wait(&status);