【Linux进程】僵尸进程与孤儿进程

前言

        僵尸进程和孤儿进程是Linux中极为重要的两个种进程状态, 本文将会围绕这三个问题: 是什么? 为什么? 如何产生的? 详细的介绍这两种进程; 以及一些使用场景.

在这里插入图片描述

 僵尸进程

 在了解孤儿进程之前, 需要先引入僵尸进程的概念;

 什么是僵尸进程?

僵尸进程: 就是处于僵死状态的进程;

        僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程, 没有读取到子进程退出的返回代码时就会产生僵死()进程
为什么会产生僵尸进程?

         进程 = 进程PCB + 进程的代码和数据; 进程存在就一定会占用一定的空间;

        为什么创建进程? 很简单, 为了让它帮我们完成某些任务;

        进程执行完毕之后, 核心任务: 将进程PCB 以及进程的代码和数据释放掉;

        父进程创建子进程, 让子进程去完成某些任务, 那么父进程可能有需求: 需要知道子进程的任务完成情况;

        子进程退出时, 会由OS将子进程的退出信息写入到进程PCB中, 允许进程的代码和数据被释放, 但是进程PCB不会立即释放, 要让父进程知道 子进程退出的信息, 得知子进程退出的原因(正常退出或者异常退出);

         当一个进程退出了, 代码和数据已经被释放, 只要PCB中的退出信息还没有被 OS或父进程读取到, OS就必须维护这-退出进程的PCB, 此时的进程状态就是Z状态, 也就是僵尸状态;

         只有被父进程读取后(wait)后, PCB的状态才会将Z状态改为X状态, 然后被OS回收;

危害 :

        一个进程处于Z状态, 父进程一直不读取回收, 那么该进程的PCB就会一直存在, 造成内核级的内存泄露(内核资源浪费);

         这种危害主要在一些服务器中较为明显, 服务器的服务会长时间的运行, 长时间的积累就会导致服务的效率变慢, 虽然重启服务器可以将僵尸进程的PCB资源释放, 但是对于服务器而言, 不可能轻易的关闭后重启;

 模拟僵尸进程的产生:

int main()
{pid_t id = fork();if (id < 0) return 1;else if (id == 0) //子进程执行5秒后退出{int cnt = 5;while (cnt){printf("I am child , runing time:%d\n", cnt--);sleep(1);}printf("I am child ,dead!:%d\n", cnt--);exit(2);}else // 父进程一直运行, 但不回收子进程{while (1){printf("I am father, running times!\n");sleep(1);}}return 0;
}

 使用指令监控进程的状态变化:

while :; do ps ajx | head -1 && ps ajx | grep myprocess | grep -v grep; sleep 1; done // myprocess为需要监控的进程名

 孤儿进程

 什么是孤儿进程?

        父进程先退出,子进程就称之为“孤儿进程”

父进程先退出,? 那么子进程退出时不就没有进程来读取子进程的PCB退出信息了吗? 

        孤儿进程被1号init进程(OS)领养
 为什么被1号进程领养?

        为了避免子进程退出, 没有进程读取子进程PCB的情况发生; 

        父进程一旦退出, 子进程如果还没有执行完毕, 就会被OS领养, 当子进程执行完毕退出后, 由OS进行读取回收; 

模拟孤儿进程的产生:

int main()
{pid_t id = fork();if (id < 0) return 1;else if (id == 0) // 子进程一直运行{while (1){printf("I am child ...\n");sleep(1);}}else // 父进程运行5秒后退出{int cnt = 5;while (cnt){printf("I am father, running time:%d\n", cnt--);sleep(1);}printf("I am father dead:%d\n", cnt--);exit(2);}return 0;
}

 监控指令:

while :; do ps ajx | head -1 && ps ajx | grep myprocess | grep -v grep; sleep 1; done // myprocess为需要监控的进程名

 孤儿进程在实际应用中的使用:

        孤儿进程的特性在一些并发服务中可以使用,  服务器服务接收请求, 对请求进行处理时可以让任务处理的主进程创建子进程去执行, 而主进程立即退出, 此时子进程就会变成孤儿进程, 被OS领养, 当子进程执行完毕后, 由OS进行回收, 任务处理的进程也不需要一直的等待子进程处理完毕;

 


总结

        孤儿进程是为了避免父进程退出, 造成子进程无法被读取, 导致子进程变成僵尸进程的情况; 僵尸进程对于服务器服务来说危害极大, 在编写服务时要特别注意; 好了以上便是本文的全部内容, 希望对你有所帮助,  感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/39904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类似Jira的在线项目管理软件有哪些?10 个主流的Jira替代方案

10 个 Jira 替代方案&#xff1a;PingCode、Worktile、Teambition、Redmine、Asana、monday.com、Zoho Projects、思码逸、Notion、Airtable。 Jira 是一款流行的项目管理工具&#xff0c;专为产品开发团队而设计。虽然它是一种多功能解决方案&#xff0c;几乎适用于任何类型的…

Git 操作补充:变基

变基 在 Git 中&#xff0c;整合来自不同分支的修改&#xff0c;除了 merge&#xff0c;还有一种方法&#xff0c;变基 rebase。git rebase 命令基本是是一个自动化的 cherry-pick 命令&#xff0c;它计算出一系列的提交&#xff0c;然后在其他地方以同样的顺序一个一个的 che…

流程表单设计器开源优势多 助力实现流程化!

实现流程化办公是很多职场企业的发展目标。应用什么样的软件可以实现这一目的&#xff1f;低代码技术平台、流程表单设计器开源的优势特点多&#xff0c;在推动企业降本增效、流程化办公的过程中作用明显&#xff0c;是理想的软件平台。那么&#xff0c;流程表单设计器开源的优…

编译Open Cascade(OCC)并使用C#进行开发

说明&#xff1a; VS版本&#xff1a;Visual Studio Community 2022系统&#xff1a;Windows 11 专业版23H2Open CASCADE&#xff1a;v7.7.0&#xff08;链接&#xff1a;https://pan.baidu.com/s/1-o1s4z3cjpYf5XkwhSDspQ?pwdp9i5提取码&#xff1a;p9i5&#xff09; 下载和…

python数据分析入门学习笔记

目录 一、 数据分析有关的python库简介 (一)numpy (二)pandas (三)matplotlib (四)scipy (五)statsmodels (六)scikit-learn 二、 数据的导入和导出 三、 数据筛选 四、 数据描述 五、 数据处理 六、 统计分析 七、 可视化 八、 其它![](https://…

windows电脑蓝屏解决方法(亲测有效)

如果不是硬件问题&#xff0c;打开终端尝试以下命令 sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth

If you already have a 64-bit JDK installed ,defined a JAVA_HOME...的错误

今天感觉idea有点卡&#xff0c;修改了一下内存&#xff0c;结果就报这个错误了&#xff0c;网上的解决方案好多&#xff0c;都不行 以下是解决方案 打开 C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.4\bin\jetbrains_client64.exe 把jihuo这个目录下所有的文件都删掉&…

通过easyexcel导入数据,添加表格参数的校验,同表格内校验以及和已有数据的校验

引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.11</version><scope>compile</scope></dependency> 需要导入到某个目录下 如果产品名称相同&#xff0c…

Mybatis数据封装

目录 解决方案&#xff1a; 1.起别名&#xff1a; 2.手动结果映射&#xff1a; 3.开启驼峰命名(推荐)&#xff1a; 我们看到查询返回的结果中大部分字段是有值的&#xff0c;但是deptId&#xff0c;createTime&#xff0c;updateTime这几个字段是没有值的&#xff0c;而数据…

分析数据不要太老实,有BI方案就用起来——奥威BI软件

在当今数据驱动的时代&#xff0c;企业对于数据分析的需求日益迫切。然而&#xff0c;面对海量的数据和复杂的分析需求&#xff0c;许多企业仍停留在传统的手工分析模式&#xff0c;这不仅效率低下&#xff0c;还容易出错。幸运的是&#xff0c;像奥威BI这样的数据分析软件提供…

【深度学习】扫描全能王的AI驱动创新与智能高清滤镜技术解析

目录 引言1、扫描全能王2、智能高清滤镜黑科技2.1、图像视觉矫正2.2、去干扰技术 3、实际应用案例3.1、打印文稿褶皱检测3.2、试卷擦除手写3.3、老旧文件处理3.4、收银小票3.5、从不同角度扫描文档 4、用户体验结论与未来展望 引言 在数字化时代背景下&#xff0c;文档扫描功能…

GitCode见证:华为云DevUI如何定义下一代前端开发

在当今快速发展的数字时代&#xff0c;前端开发已成为企业数字化转型的关键一环。随着用户对交互体验的期待不断增长&#xff0c;拥有一个强大、灵活且易于使用的前端解决方案变得至关重要。 DevUI的诞生&#xff0c;源于华为对研发工具的深入理解和长期积累&#xff0c;作为一…

【云原生监控】Prometheus 普罗米修斯从搭建到使用详解

目录 一、前言 二、服务监控概述 2.1 什么是微服务监控 2.2 微服务监控指标 2.3 微服务监控工具 三、Prometheus概述 3.1 Prometheus是什么 3.2 Prometheus 特点 3.3 Prometheus 架构图 3.3.1 Prometheus核心组件 3.3.2 Prometheus 工作流程 3.4 Prometheus 应用场景…

如何使用C++进行高效的数据处理和数据挖掘?

如何使用C进行高效的数据处理和数据挖掘&#xff1f; 数据处理和数据挖掘在如今信息爆炸的时代变得越来越重要。为了快速、高效地处理和分析大量的数据&#xff0c;选择合适的编程语言非常重要。C作为一种高性能的编程语言&#xff0c;在数据处理和数据挖掘领域也有广泛的应用…

8624 多项式系数累加和

这个问题可以通过使用数学的导数规则来解决。对于一个多项式&#xff0c;它的导数可以通过将每一项的系数乘以它的指数&#xff0c;然后降低该项的指数来得到。这个过程可以重复M次来得到多项式的M阶导数。然后&#xff0c;我们可以简单地将所有项的系数相加来得到结果。 以下…

3D Gaussian Splatting代码中的train和render两个文件代码解读

现在来聊一聊训练和渲染是如何进行的 training train.py line 31 def training(dataset, opt, pipe, testing_iterations, saving_iterations, checkpoint_iterations, checkpoint, debug_from):# 初始化第一次迭代的索引为0first_iter 0# 准备输出和日志记录器tb_writer p…

wordpress企业主题和wordpress免费主题

农业畜牧养殖wordpress主题 简洁大气的农业畜牧养殖wordpress主题&#xff0c;农业农村现代化&#xff0c;离不开新农人、新技术。 https://www.jianzhanpress.com/?p3051 SEO优化wordpress主题 简洁的SEO优化wordpress主题&#xff0c;效果好不好&#xff0c;结果会告诉你…

第一后裔The First Descendant延迟、卡顿、无法联机?

The First Descendant第一后裔游戏中还设计了多种辅助攻击手段&#xff0c;它们如同角色手中的魔法&#xff0c;为战斗增添了无数可能性。这些辅助攻击手段或能造成范围伤害&#xff0c;或能减速敌人&#xff0c;甚至能召唤出强大的支援力量。最近有玩家反映&#xff0c;遇到了…

Windows条件竞争提权漏洞复现(CVE-2024-300889)

漏洞原理 当内核将当前令牌对象的 _AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION 复制到用户模式时&#xff0c;错误位于函数 AuthzBasepCopyoutInternalSecurityAttributes 内部&#xff0c;该模式的结构如下&#xff1a; //0x30 bytes (sizeof) struct _AUTHZBASEP_SECURIT…

科研工具|从图片中提取曲线数据

最近水哥在做一个项目时需要用到一篇论文中的数据&#xff0c;而这数据是作者的实验数据&#xff0c;且年代较为久远&#xff0c;联系原作者要一份数据也不太现实&#xff0c;因而只能从论文的图片中提取数据了。 目前市面上有很多小软件可以实现这方面的功能&#xff0c;比如…