06 - 深入Linux进程
创始人
2025-06-01 00:01:43
0

---- 整理自狄泰软件唐佐林老师课程

查看所有文章链接:(更新中)Linux系统编程训练营 - 目录

文章目录

  • 1. 问题
    • 1.1 进程参数和环境变量的意义
    • 1.2 思考
  • 2. 深入理解父子进程
    • 2.1 进程等待系统接口
    • 2.2 进程退出系统接口
    • 2.3 问题
    • 2.4 进程退出状态详解
    • 2.5 僵尸进程(僵死状态)
    • 2.6 僵尸进程的危害
    • 2.7 wait()的局限
    • 2.8 编程实验:子进程实验
    • 2.9 僵尸进程避坑指南

1. 问题

  • 进程参数和环境变量对于进程意味着什么?

1.1 进程参数和环境变量的意义

  • 一般情况下,子进程的创建是为了解决某个子问题
  • 子进程解决问题需要父进程的 “数据输入”(进程参数 & 环境变量)
  • 设计原则:
    • 子进程启动时 必然 用到的参数使用 进程参数 传递
    • 子进程解决问题 可能 用到的参数使用 环境变量 传递

在这里插入图片描述

1.2 思考

  • 子进程如何将结果 “返回” 父进程?

在这里插入图片描述

【参看链接】:06 - 深入Linux进程 / 00 / test.c

在这里插入图片描述
在这里插入图片描述

2. 深入理解父子进程

  • 子进程的创建是为了 并行的解决子问题(问题分解,原问题分解为子问题,子问题之间没有依赖关系)
  • 父进程需要通过 等待子进程的结果 以最终解决问题(并获取结果)

在这里插入图片描述

2.1 进程等待系统接口

  • pid_t wait(int* status);
    • 等待一个子进程完成,并返回子进程标识和状态信息
    • 当有多个子进程完成,随机挑选一个子进程返回
  • pid_t waitpid(pid_t pid, int* status, int options);
    • 可等待特定的子进程或一组子进程
    • 在子进程还未终止时,可通过options设置不必等待(直接返回)

2.2 进程退出系统接口

  • 头文件:#include
    • void _exit(int status); // 系统调用,终止当前进程
  • 头文件:#include
    • void exit(int status); // 库函数,先做资源清理,再通过系统调用终止进程
    • void abort(void); // 异常终止当前进程(通过产生SIGABRT信号终止)
  • 注:信号:操作系统发送给进程的通知。

2.3 问题

下面的程序运行后会发生什么?

【参看链接】:06 - 深入Linux进程 / 01 / main.c

在这里插入图片描述
在这里插入图片描述

2.4 进程退出状态详解

在这里插入图片描述
在这里插入图片描述

  • 编程实验

【参看链接】:06 - 深入Linux进程 / 02 / main.c

在这里插入图片描述
在这里插入图片描述

2.5 僵尸进程(僵死状态)

【参看链接】:06 - 深入Linux进程 / 03 / main.c

在这里插入图片描述

  • 理论上,进程 退出 / 终止 后应立即释放所有系统资源
    • 然而,为了给父进程提供一些 重要信息,子进程 退出 / 终止 所占的部分资源 会暂留
    • 当父进程收集这部分信息后(wait / waitpid),子进程所有资源被释放
      • 父进程调用wait(),为子进程 “收尸” 处理并释放暂留资源
      • 若父进程退出,init / systemd 为子进程 “收尸” 处理并释放暂留资源

2.6 僵尸进程的危害

  • 僵尸进程保留进程的终止状态和资源的使用信息
    • 进程为何退出,进程消耗多少CPU时间,进程最大内存驻留值,等
  • 如果僵尸进程得不到回收,那么可能影响正常进程的创建
    • 进程创建最重要的资源是内存和进程标识
    • 僵尸进程的存在可看作是一种类型的内存泄露
    • 当系统僵尸进程过多,可能导致进程标识不足,无法创建新进程

2.7 wait()的局限

  • 不能等待指定子进程,如果存在多个子进程,只能逐一等待完成
  • 如果不存在终止的子进程,父进程只能阻塞等待
  • 只针对终止的进程,无法发现暂停的进程
  • wait(…)升级 ==> pid_t waitpid(pid_t pid, int* status, int options)
    • 返回值相同,终止子进程标识符
    • 状态值意义相同,记录子进程中止信息
    • 特殊之处:
      在这里插入图片描述

2.8 编程实验:子进程实验

【参看链接】:06 - 深入Linux进程 / 04/ main.c

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.9 僵尸进程避坑指南

  • 利用wait(…)返回值判断是否继续等待子进程,意味着 父进程阻塞
    • while( ( pid = wait(&status) ) > 0 ) { … }
  • 利用 waitpid(…)及 init / systemd 回收子进程
    • 通过两次fork()创建 孙进程 解决子问题

相关内容

热门资讯

门店多小本创业好项目 门店多小... 任何行业都会有28法则,谁能坚持下去谁就能取得成功。付出的越多才赚的多,新手想通过兼职快速赚到钱,肯...
淘宝新手~提问~ 淘宝新手~提问~这个都是说不定的,一般就是2--3天的。有些也许更慢吧。呵呵 ,这个要有点耐心
2014创业优选项目 优选终极... 生活中的竞争越来越大了。现如今创业找项目也没那么简单,想成功更没那么容易,找对一个适合自己的项目更是...
你瞧,夏夜多美啊!与啊,多美的... 你瞧,夏夜多美啊!与啊,多美的夏夜呀!这两句表达的意思有什么不同?你瞧,夏夜多美啊!与啊,多美的夏夜...
至尊逍遥的内容简介 至尊逍遥的内容简介他是公子哥心中的公子哥,他是同学们心中的团宽三好生,他是下属们心中的英春或昌明少主...
为了阻止全球变暖,我们可以做些... 为了阻止全球变暖,我们可以做些什么力所能及的事?为了阻止全球变暖,我们可以做很多力所能及的事情。在我...
吴欢喜入选“网上蒲公英”典型   本报讯 (通讯员 翟静)6月11日,2025年中国网络文明大会网络文明国际交流互鉴分论坛在安徽合...
巴尔扎克长中短篇小说总名为 巴尔扎克长中短篇小说总名为巴尔扎克一生创作96部长、中、短篇小说和随笔,总名为《人间喜剧》。巴尔扎克...
青年早新闻 | 刷新纪录!今晚... 今天是6月17日,中国青年报“青年早新闻”来了——“青年关注、关注青年”!几分钟速览最新热点,带你走...
一段开始是鸟叫,然后是流水声,... 一段开始是鸟叫,然后是流水声,接下来是音乐的轻音乐~旋律非常熟悉,可是就是叫不出名字。一段开始是鸟叫...
一锅米粉肉“蒸”出年产值超千万...   □鄢飞飞 洪观新闻记者 陈明喜  蒸汽氤氲间,油润鲜香的五花肉裹着细密米粉,在竹笼里泛着诱人光泽...
前5月铁路完成固定资产投资24... 来源:人民日报  记者从中国国家铁路集团有限公司获悉:今年1至5月,全国铁路完成固定资产投资2421...
【环球财经】美国与英国签署贸易... 转自:新华财经新华财经纽约6月16日电(记者 刘亚南)美国总统特朗普16日与英国首相斯塔默在加拿大参...
踏上“寻香”之旅 感受优质医康...   本报讯 近期,太平人寿广西分公司组织VIP客户及企业主走进“中国茉莉之乡”——横州市,开启了一场...
A股分红派息转增一览:88股今... 每经AI快讯,Wind数据显示,根据上市公司权益分配方案梳理统计,88只A股今日股权登记。其中,80...
间谍冒充研究生邮件窃密,杨教授... 转自:河北长城网 #间谍冒充大学生窃密#【转发!警惕!#...
西部黄金溢价14倍买矿加码布局...   长江商报消息 溢价超14倍,西部黄金(601069.SH)向大股东收购资产。  6月12日晚,西...
刘恺威主演的电视剧有是他自己本... 刘恺威主演的电视剧有是他自己本人的声音吗他演的电视剧多是他人配的音看看他的港剧呢有!叫《重生门》合作...
提高政治站位 强化责任担当 ...   本报讯(洪观新闻记者 赵丹)6月16日,市长高世文带领市直相关部门同志深入一线,直面困难,开展城...
聚焦2025年廊坊经洽会丨全球... 转自:河北新闻网全球好物“汇”廊坊——走进内外贸一体化进出口商品展6月16日,观众在2025年廊坊经...