Linux(9)——进程(控制篇——下)

三、进程等待

1)进程等待的必要性

  1. 之前提过子进程退出,父进程如果不读取子进程的退出信息,就可能造成"僵尸进程"的问题,从而造成内存泄漏的问题。
  2. 再者,一旦子进程进入了僵尸状态,那就连kill -9都杀不亖他,因为没有谁能够杀亖一个死去的进程。
  3. 最后,父进程创建子进程是要获取子进程的完成任务的情况的。
  4. 父进程需要通过等待的方式来回收子进程的资源,获取子进程的退出信息。

2)获取子进程的status

下面进程等待使用的两个方法wait方法和waitpid方法都有一个status参数,这是一个输出型参数(输出型参数是函数中用于返回结果或修改调用者变量的参数,通常通过引用或指针实现。如void func(int *output)。),由操作系统进行填写。

如果向status中传递的是NULL,那就表示用户不关心子进程的退出状态。否则,操作系统会根据该参数,将子进程的退出信息反馈给父进程。

status不能简单的当作整形来看待,可以当作位图来看待,具体细节如下图(只研究status低16比特位):

我们从图中可见,status的低16比特位中,高8位表示进程的退出状态,即退出码。当进程被信息杀亖时,则低7位表示终止信息,第8位时core dump标志。

wait方法

函数类型:pid_t wait(int* status);
返回值:成功返回被等待进程pid,失败返回-1。
参数:输出型参数,获取子进程退出状态,不关心则可以设置成为NULL
作用:等待任意子进程

创建子进程后,父进程使用wait方法等待子进程,直到子进程的退出信息被读取,我们可以写个代码验证一下:

相关推荐
望获linux6 分钟前
【Linux基础知识系列】第六十四篇 - 了解Linux的硬件架构
linux·运维·服务器·开发语言·数据库·操作系统·嵌入式软件
汐零号机10 分钟前
Ubuntu启动任何应用慢(2~4秒)排查和分析
linux·ubuntu
老实巴交的麻匪14 分钟前
(一)学习、实践、理解 CICD 与 DevOps
运维·敏捷开发·自动化运维
别退27 分钟前
fmriprep安装与试用_附ubuntu分区大小调整
linux·运维·ubuntu
段嘉许OvO35 分钟前
jangow-01-1.0.1靶机攻略
linux·运维·服务器
光电的一只菜鸡42 分钟前
linux shell从入门到精通(二)——变量操作
linux·运维·chrome
程思扬1 小时前
无界设计新生态:Penpot开源平台与cpolar的云端协同创新实践
大数据·linux·服务器·前端·经验分享·ubuntu·开源
大白菜13241 小时前
Linux的基本操作以及文件的权限
linux·运维·服务器
学术小八1 小时前
第六届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2025)
运维·人工智能·自动化
是阿建吖!1 小时前
【Linux | 网络】传输层(UDP和TCP) - 两万字详细讲解!!
linux·网络·udp·tcp