Linux——wait回收子进程、回收子进程退出值和异常终止信号,waitpid回收子进程/回收多个子进程,两个回收函数的总结

一、wait回收子进程

一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,==但它的PCB还保留着,内核在其中保存了一些信息:==如果是正常终止则保存着退出状态;如果是异常终止则保存着导致改进程终止的信号是哪个,这个进程的父进程可以调用wait或waitpid获取这些信号,然后彻底清除掉这个进程。
进程的退出状态可以在shell中用特殊变量$?查看,因为shell是它的父进程,当它终止时,shell调用wait或waitpid得到它的退出状态同时彻底清除掉这个进程

父进程调用wait函数可以回收子进程终止信息,该函数有三个功能:

  1. 阻塞等待子进程退出(一定要等到子进程死了才走)
  2. 回收子进程残留资源
  3. 获取子进程结束状态(退出原因)

pid_t wait(int *status),status是一个返回参数,成功返回回收子进程的进程id,失败返回-1
部分代码一览:
在这里插入图片描述
只有子进程死亡了父进程才会返回

  • 返回状态status的用法:
    在这里插入图片描述

二、回收子进程退出值和异常终止信号

使用wait函数传出参数status来保存进程的退出状态,借助宏函数来进一步判断进程终止的具体原因*
在这里插入图片描述
WIFEXITED\WEXITSTATUS\WTERMSIG在这里插入图片描述

三、waitpid回收子进程

在这里插入图片描述
1,pid可以指定某一个进程进行回收
2,status可以获取子进程的退出状态和异常终止信号
3,options用来设置非阻塞WNOHANG
在这里插入图片描述
特殊参数和返回情况:·
在这里插入图片描述

四、回收多个子进程

用while循环实现

原创文章 119 获赞 27 访问量 5997

猜你喜欢

转载自blog.csdn.net/qq_37299596/article/details/105843097
今日推荐