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

相关推荐
vvilkim1 分钟前
深入理解C#异步编程:原理、实践与最佳方案
服务器·开发语言·c#
加百力31 分钟前
戴尔AI服务器订单激增至121亿美元,但传统业务承压
大数据·服务器·人工智能
运维成长记32 分钟前
ansible-playbook 进阶 接上一章内容
linux·服务器·ansible
愚润求学1 小时前
【Linux】mmap文件内存映射
linux·运维·服务器·开发语言·c++
就是我2 小时前
轻松管理Linux定时任务:Cron实用教程
linux·后端
hgdlip2 小时前
换ip是换网络的意思吗?怎么换ip地址
服务器·网络·tcp/ip
hope_wisdom2 小时前
Linux系统编程之共享内存
linux·共享内存·linux系统·linux编程
Ealrang2 小时前
Linux分区总结
运维
shmily_ke3 小时前
如何将vue2使用npm run build打包好的文件上传到服务器
服务器·前端·npm
江湖有缘3 小时前
【Docker管理工具】部署Docker管理面板DweebUI
运维·docker·容器