当前位置: 首页 > news >正文

【Linux进程特别篇】深度理解辨识僵尸进程和孤儿进程

---------------------------------------------------------------------------------------------------------------------------------

每日鸡汤:每一份坚持都是成功的积累,只要相信自己,总会遇到惊喜。

-------------------------------------------------------------------------------------------------------------------------------

目录

​编辑

一:进程的状态

二:僵尸进程

2.1:僵尸进程的定义与特点

2.2:僵尸进程怎样产生的,如何避免出现僵尸进程?

三:孤儿进程

2.1:孤儿进程的定义与特点

2.2:孤儿进程怎样产生的,如何避免出现孤儿进程?

四:区分辨识僵尸进程和孤儿进程

4.1:僵尸进程和孤儿进程的实例源码

4.1.1:创建僵尸进程

4.1.2:创建孤儿进程

4.2:总结区别僵尸进程和孤儿进程


一:进程的状态

进程在操作系统中可以处于多种状态,这些状态反映了进程在生命周期中的不同阶段。通常,最基本的进程状态模型包括三种状态:就绪(Ready)、运行(Running)和阻塞(Blocked),有时也称为等待(Waiting),但是在Linux中还有一些其他的进程状态,比如暂停态,僵尸态,孤儿态等

即,僵尸进程和孤儿进程是Unix/Linux操作系统中两种特殊类型的进程状态。它们都涉及到父进程与子进程之间的关系 。

为了深度理解父子进程,了解僵尸进程和孤儿进程是学习道路上必不可少的一个阶段。

二:僵尸进程

2.1:僵尸进程的定义与特点

僵尸进程的定义:

僵尸进程是一个已经完成执行(即其所有代码都已运行完毕),但其父进程尚未读取其退出状态的进程。

 僵尸进程的特点:

  • 僵尸进程不再占用任何CPU资源或内存资源,但它仍然在系统进程表中占有一项,保留了一些信息(如进程ID、退出状态等)。
  • 如果不及时处理僵尸进程,系统中的进程表会逐渐被填满,最终可能导致无法创建新的进程。

2.2:僵尸进程怎样产生的,如何避免出现僵尸进程?

僵尸进程由很多的危害,那么僵尸进程是如何产生的呢

当一个子进程终止时,它会向其父进程发送一个信号(通常是 SIGCHLD),通知父进程它的退出状态。如果父进程没有调用 wait() 或 waitpid() 来读取子进程的退出状态,子进程就会变成僵尸进程。

避免出现僵尸进程:

父进程尽快通过wait()waitpid()来收集子进程的状态信息,这样内核就可以回收子进程的PCB。如果父进程不这样做,可以考虑发送信号给父进程强制其处理,或者重启父进程。

三:孤儿进程

2.1:孤儿进程的定义与特点

孤儿进程的定义:

如果一个进程的父进程在它之前终止了,而该进程自己仍然存活并运行着,这样的进程被称为孤儿进程。

孤儿进程的特点:

  • 在现代Unix/Linux系统中,一旦某个进程成为孤儿进程,init进程(进程号为1)会自动收养这些孤儿进程。
  • init进程会负责等待孤儿进程结束,并且清理它们的状态信息。
  • 孤儿进程继续正常运行,直到它们自然终止。 

2.2:孤儿进程怎样产生的,如何避免出现孤儿进程?

孤儿进程的产生:

  • 父进程在子进程之前退出:当一个进程(父进程)创建了一个或多个子进程后,如果父进程在它的所有子进程之前终止了,那么这些子进程就变成了孤儿进程。这是因为每个进程都有一个父进程,而一旦父进程不再存在,子进程就会失去它们的父进程。
  • 父进程被强制终止:有时候,父进程可能因为某种原因被系统管理员或者通过其他程序(如使用kill命令)强制终止。如果此时有活动的子进程,那么这些子进程也会变成孤儿进程。
  • 父进程崩溃:如果父进程由于编程错误或者其他问题而崩溃,同样会导致其子进程成为孤儿进程。
  • 父进程主动放弃子进程:在某些情况下,父进程可能会调用特定的函数(例如prctl(PR_SET_PDEATHSIG, SIGKILL))来设置自己死亡时向子进程发送信号,从而让子进程知道自己的父进程已经不存在,并采取相应的行动。但如果不这样做,子进程仍会成为孤儿

避免出现孤儿进程:

通常不需要特别处理孤儿进程,因为init进程会接管它们。但如果希望避免产生孤儿进程,可以在编写程序时确保父进程妥善地管理其子进程的生命周期,例如使用信号处理器来捕获父进程的退出信号并在退出前清理子进程。

四:区分辨识僵尸进程和孤儿进程

4.1:僵尸进程和孤儿进程的实例源码

4.1.1:创建僵尸进程

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>int main()
{pid_t id = fork();if(id == 0){//子进程int cnt = 5;while(cnt){printf("我是子进程,pid: %d, ppid: %d, cnt: %d\n",getpid(),getppid(),cnt);cnt--;sleep(1);}exit(0);}else{while(1){printf("我是父进程,pid: %d, ppid: %d\n",getpid(),getppid());sleep(1);}}return 0;
}

父进程还没有运行完,而子进程运行完了,子进程的资源没有被父进程回收。

查看实例情况:

4.1.2:创建孤儿进程

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>int main()
{pid_t id = fork();if(id == 0){//子进程int cnt = 500;while(cnt){printf("我是子进程,pid: %d, ppid: %d, cnt: %d\n",getpid(),getppid(),cnt);cnt--;sleep(1);}exit(0);}else{int cnt1 = 5;while(cnt1--){printf("我是父进程,pid: %d, ppid: %d, cnt1 = %d\n",getpid(),getppid(), cnt1);sleep(1);}}return 0;
}

当父进程运行完毕回收,而子进程却还正在运行。此时该子进程就被称为孤儿进程。因为孤儿进程的父进程已经被回收了,所以为了保障到时候该子进程运行结束有父进程回收他的资源(不让他成为僵尸进程),操作系统(init进程,进程号为1)会 “收养” 该子进程,所以该子进程的父进程就是init进程,其父进程号为1,那么该子进程就被称为孤儿进程。

查看实例情况:

4.2:总结区别僵尸进程和孤儿进程

子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入僵尸状态,子进程就称之为“僵尸进程”
父进程先退出,子进程还在运行,子进程被操作系统“领养”,子进程就称之为“孤儿进程”

相关文章:

【Linux进程特别篇】深度理解辨识僵尸进程和孤儿进程

--------------------------------------------------------------------------------------------------------------------------------- 每日鸡汤&#xff1a;每一份坚持都是成功的积累&#xff0c;只要相信自己&#xff0c;总会遇到惊喜。 -----------------------------…...

喜报|超维机器人荣获昇腾AI创新大赛铜奖

近日&#xff0c;在备受瞩目的昇腾AI创新大赛中&#xff0c;超维机器人凭借扎实的技术实力和创新产品&#xff0c;荣获大赛铜奖。这一荣誉不仅展现了超维机器人在智能巡检领域的技术创新与突破&#xff0c;也标志着超维机器人的智能巡检解决方案在人工智能领域获得了广泛认可&a…...

从五种架构风格推导出HTTP的REST架构

在分布式系统中,架构风格(Architectural Style)决定了系统组件如何交互、通信、存储和管理数据。每种架构风格都有其独特的特性和适用场景。本文将从五种典型的架构风格出发,逐步探讨它们如何影响了REST(Representational State Transfer,表述性状态转移)架构风格的设计…...

vue-h5:在h5中实现相机拍照加上身份证人相框和国徽框

方案1&#xff1a;排出来照片太糊了&#xff0c;效果不好 1.基础功能 参考&#xff1a; https://blog.csdn.net/weixin_45148022/article/details/135696629 https://juejin.cn/post/7327353533618978842?searchId20241101133433B2BB37A081FD6A02DA60 https://www.freesio…...

免费HTML模板和CSS样式网站汇总

HTML模板&#xff1a;&#xff08;注意版权&#xff0c;部分不可商用&#xff09; 1、Tooplate&#xff0c;免费HTML模板下载 Download 60 Free HTML Templates for your websitesDownload 60 free HTML website templates or responsive Bootstrap templates instantly from T…...

Mac打开time machine(时间机器)备份特殊文件

Mac 打开time machine&#xff08;时间机器&#xff09;备份特殊文件 设置“时间机器”的作用具体操作办法 前言&#xff1a;今天在使用Nas同步文件时发现有部分重要文件没有同步&#xff0c;为了省事手动拖拽复制文件&#xff0c;导致其中一份非常重要的文件丢失&#xff0c;尝…...

Qt 学习第十六天:文件和事件

一、创建widget对象&#xff08;文件&#xff09; 二、设计ui界面 放一个label标签上去&#xff0c;设置成box就可以显示边框了 三、新建Mylabel类 四、提升ui界面的label标签为Mylabel 五、修改mylabel.h&#xff0c;mylabel.cpp #ifndef MYLABEL_H #define MYLABEL_H#incl…...

nvm 切换 Node.js 版本

nvm 切换 Node.js 版本 0. nvm 安装1. 查看装了哪些 Node.js 版本2. 安装 Node.js 版本安装最新稳定版本.安装个18 3. 切换 Node.js 版本4. 设置默认 Node.js 版本5. 卸载 Node.js 版本6.与项目的配合使用参考资料 0. nvm 安装 安装教程就不写了&#xff0c;直接看别人的。 脚…...

AI绘图最强软件stable diffusion,一文带你迅速了解!

有需要stable diffusion整合包可以扫描下方&#xff0c;免费获取 01 — 什么是 SD ​ Stable Difusion(简称 SD) 其三种概念。 1.用来指代稳定扩散(Stable Diffusion) 技术,如 Midjourney是基于Stable Difusion技术实现的就是指它运用了 Stable Diffusion 的技术原理。 …...

VMware重磅官宣!Workstation和Fusion彻底全部免费:支持商用

VMware 官网宣布&#xff1a;VMware Workstation Pro: Now Available Free for Personal Use 别问&#xff0c;问就是正版用户&#xff01;&#xff01;&#xff01; VMware宣布&#xff0c;其桌面虚拟化产品VMware Workstation和VMware Fusion将对所有用户彻底免费&#xff0…...

CCS 学习记录

1.导入项目 在CCS菜单中选择Project->Import Existing CCS Eclipse Project&#xff0c;点击Browse找到CCS workspace所在文件夹&#xff0c;点击OK&#xff0c;CCS会自动将所选文件夹及其子文件夹下所有的CCS Projects列出。从列表中找到所要导入的项目文件夹&#xff0c;…...

241112.学习日志——[CSDIY] Cpp零基础速成 [01]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…...

94.【C语言】数据结构之双向链表的初始化,尾插,打印和尾删

目录 1.双向链表 2.结构体的定义 3.示意图 3.代码示例 1.双向链表的尾插 示意图 代码 main.c List.h List.c 详细分析代码的执行过程 双向链表的初始化 2.双向链表的打印 代码 3.双向链表的尾删 1.双向链表 以一种典型的双向链表为例:带头双向循环链表(带头:带…...

learn-F12 Performance(性能)前端性能分析(LCP,CLS,INP)

1.前言 在浏览器开发者工具&#xff08;F12&#xff09;中&#xff0c;本地指标&#xff08;Local Metrics&#xff09;包括LCP&#xff08; Largest Contentful Paint&#xff09;、CLS&#xff08; Cumulative Layout Shift&#xff09;和INP&#xff08; Interaction to Nex…...

XCZU47DR-2FSVE1156

XCZU47DR-2FSVE1156 芯片概述 XCZU47DR-2FSVE1156 是一款由 Xilinx 公司生产的 Zynq UltraScale™ RFSoC 芯片。该芯片集成了多种高性能组件&#xff0c;包括四核 ARM Cortex-A53 MPCore™ 和双核 ARM Cortex™-R5&#xff0c;提供了强大的计算能力和灵活性。它还具备丰富的连…...

物联网低功耗广域网LoRa开发(一):LoRa物联网行业解决方案

一、LoRa的优势以及与其他无线通信技术对比 &#xff08;一&#xff09;LoRa的优势 1、164dB链路预算 、距离>15km 2、快速、灵活的基础设施易组网且投资成本较少 3、LoRa节点模块仅用于通讯电池寿命长达10年 4、免牌照的频段 网关/路由器建设和运营 、节点/终端成本低…...

【LeetCode】【算法】23. 合并K个升序链表

LeetCode 23. 合并K个升序链表 题目描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 思路 思路&#xff1a;用小根堆解&#xff0c;很强 创建一个小根堆&#xff0c;排序规则为小根堆排序…...

python3的基本数据类型:Dictionary(字典)的创建

一. 简介 本文开始简单学习一下 python3中的一种基本数据类型&#xff1a;Dictionary&#xff08;字典&#xff09;。 字典&#xff08;dictionary&#xff09;是Python中另一个非常有用的内置数据类型。 二. python3的基本数据类型&#xff1a;Dictionary&#xff08;字典&…...

【C++】string模拟实现

各位读者老爷好&#xff0c;俺最近在学习string的一些知识。为了更好的了解string的结构&#xff0c;俺模拟实现了一个丐版string&#xff0c;有兴趣的老爷不妨垂阅&#xff01;&#xff01;&#xff01; 目录 1.string类的定义 2.模拟实现成员函数接口 2.1.constructor&am…...

Springboot 使用EasyExcel导出含图片并设置样式的Excel文件

Springboot 使用EasyExcel导出含图片并设置样式的Excel文件 Excel导出系列目录&#xff1a;★★★★尤其注意&#xff1a;引入依赖创建导出模板类逻辑处理controllerservice 导出效果总结 Excel导出系列目录&#xff1a; 【Springboot 使用EasyExcel导出Excel文件】 【Springb…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...