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方法等待子进程,直到子进程的退出信息被读取,我们可以写个代码验证一下:

相关推荐
獭.獭.18 分钟前
Linux -- 线程互斥
linux·互斥锁·mutex·互斥量·线程互斥
Broken Arrows23 分钟前
排查网络问题的一些工具的作用和常用使用方法
linux·网络·学习
撒币使我快乐1 小时前
Windows安装Claude Code全流程
linux·windows·claude
Fanmeang1 小时前
华为SRv6技术:引领IP网络进入新时代的智能导航系统
运维·网络·华为·vpn·ipv6·srv6
我科绝伦(Huanhuan Zhou)1 小时前
【免费】MySQL自动化巡检工具,一键生成WORD巡检报告
运维·mysql·自动化
SiriusSun_1 小时前
Windows10 wsl2 ubuntu22.04 docker安装
运维·docker·容器
longerxin20201 小时前
ubuntu所有版本镜像下载链接
linux·运维·ubuntu
数据雕塑家2 小时前
Linux下的花式「隔空」文件传输魔法
linux·运维·服务器
uoscn2 小时前
链接脚本(Linker Scripts)
linux·arm开发·arm
wuxingge2 小时前
浪潮服务器-型号NF5270M3做raid
服务器