Linux——进程状态

 我们都知道进程信息被放到了PCB(task_struct)中,可以理解为进程属性的集合。

PCB中包含了进程的ID,时间片,pc指针,所有的寄存器,进程状态、优先级、I/O状态信息等等...有兴趣的可以去看看源码,也可以去看看这篇文章https://www.cnblogs.com/tongyan2/p/5544887.html

PCB是内核中很重要的一个数据结构,每一个在系统中运行的进程,都是以PCB的链表形式存在内核中,它管理起了OS的内核。

在OS中,弄明白进程的不同状态是很重要的,在内核中,有以下几种状态:

R(运行状态 running):R状态并不意味着运行中,也有可能在运行队列中。

S(可中断状态 sleeping):也叫做睡眠状态,意味着进程在等待事件完成。

D(不可中断状态 Disk sleep): 有时候也叫做不可中断睡眠状态,在这个状态的进程通常会等待IO的结束。

T(停止状态 stopped):可以通过SIGSTOP信号来暂停T进程,当然也可以通过信号来让进程继续运行。

X(死亡状态 dead): 这个状态只有一个返回状态,你不会在任务列表中看到这个进程。

运行状态(R):

我们用下面的代码来模拟一下R状态,

可以发现,这与我们的想法不一样?  这是为什么呢??
我们都知道在内存很快,当sleep函数的时候,OS会很快将它执行完,这时就由R -> S

僵尸状态(Z):

int main()
{
    int time = 0;
    int ret = fork();
    if (ret < 0)
    {
        perror("fork fail\n");
        exit(-1);
    }

    if (ret == 0)
    {
        // child
        while(1)
        {
            cout << "我是子进程:pid:" << getpid() << "  " << "ppid:" << getppid() << " " << ++time << endl;
            sleep(1);

            if(time == 10)
            {
                return 1;
            }
        } 
    }
    else
    {
        // father
        while(1)
        {
            cout << "我是父进程:pid:" << getpid() << "  "<< "ppid:" << getppid()  <<" " << ++time << endl;
            sleep(1);
        }
    }

    return 0;
}

我们可以发现,第10s的时候,由于子进程退出先于父进程退出,并且父进程没有读取到子进程的退出码,就会造成僵尸状态。

危害:这非常消耗资源,因为子进程的代码和数据,进程ID...都在PCB中,如果父进程没有读取退出状态代码,那么子进程会一直以终止状态保持在进程表中。

孤儿进程:

所谓孤儿进程,就是当父进程先于子进程退出,这时子进程就是孤儿进程,但当子进程退出变成Z的时候,会由1号进程来回收子进程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vuepress路径问题,导致图片不显示

图片不显示&#xff0c;报 Uncaught SyntaxError: Unexpected token <错误 很可能就是&#xff1a;路径配置原因 1.当设置为 / 时&#xff0c;VuePress 会假设你的站点将部署到服务器的根路径&#xff0c; 例如 https://yourdomain.com/。 2.生成的页面链接和资源引用将以…

Linux内核上游提交完整流程及示例

参考博客文章&#xff1a; 向linux内核提交代码 - 知乎 一、下载Linux内核源码 通过git下载Linux内核源码&#xff0c;具体命令如下&#xff1a; git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 实际命令及结果如下&#xff1a; penghaoDin…

LLM之RAG实战(二):使用LlamaIndex + Metaphor实现知识工作自动化

最先进的大型语言模型&#xff08;LLM&#xff09;&#xff0c;如ChatGPT、GPT-4、Claude 2&#xff0c;具有令人难以置信的推理能力&#xff0c;可以解锁各种用例——从洞察力提取到问答&#xff0c;再到通用工作流自动化。然而&#xff0c;他们检索上下文相关信息的能力有限。…

使用Caliper对Fabric地basic链码进行性能测试

如果你需要对fabric网络中地合约进行吞吐量、延迟等性能进行评估&#xff0c;可以使用Caliper来实现&#xff0c;会返回给你一份网页版的直观测试报告。下面是对test-network网络地basic链码地测试过程。 目录 1. 建立caliper-workspace文件夹2. 安装npm等3. calipe安装4. 创建…

从线程间通信聊到阻塞队列

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 很多Java新手都对Reent…

C#科学绘图库ScottPlot

文章目录 安装和准备初步使用简单的设置 安装和准备 ScottPlot是基于.Net的一款开源免费的交互式可视化库&#xff0c;支持Winform和WPF等UI框架&#xff0c;本文示例在WPF环境中运行。在VS的菜单栏->工具->NuGet包管理器->管理解决方案的NuGet程序包->在浏览选项…

WordCount 源码解析 Mapper,Reducer,Driver

创建包 com.nefu.mapreduce.wordcount &#xff0c;开始编写 Mapper &#xff0c; Reducer &#xff0c; Driver 用户编写的程序分成三个部分&#xff1a; Mapper 、 Reducer 和 Driver 。 &#xff08; 1 &#xff09; Mapper 阶段 ➢ 用户自定义的 Mapper 要继承自己的父…

电话卡Giffgaff激活

Giffgaff是一家总部位于英国的移动电话公司。作为一家移动虚拟网络电信运营商&#xff0c;Giffgaff使用O2的网络&#xff0c;是O2的全资子公司&#xff0c;成立于2009年11月25日。 Giffgaff与传统的移动电话运营商不同&#xff0c;区别在于其用户也可以参与公司的部分运营&…

lazada来赞达API开发系列:item_get - 获得lazada商品详情API返回值说明

Lazada API接口的作用主要体现在以下几个方面&#xff1a; 获取商品信息&#xff1a;通过Lazada API接口&#xff0c;开发者可以获取Lazada平台上的商品详细信息&#xff0c;包括商品的名称、价格、图片、描述、规格、库存等&#xff0c;这些信息有助于用户了解商品特点、性能…

Xshell应用程序无法正常启动0xc000007b

重启&#xff0c;卸载重装&#xff0c;添加csdn教程里的缺失文件没用下载修复工工具也没弄出来之后&#xff0c;在他的工具下拉栏里调成增强模式增加C&#xff0c;功能成功解决。如下图在重新修复&#xff0c;他中途会有捐赠提示&#xff0c;可以关闭成功后再支持&#xff0c;我…

MES系统中的生产调度流程你了解多少?

万界星空科技专注于制造业生产&#xff08;MES&#xff09;管理平台的研发和实施&#xff0c;已成功帮助很多企业和工厂解决了内部的管理问题&#xff0c;有效的提高了生产效率&#xff0c;并且节省了人力。成功应用于汽车、高科技电子、注塑、电线电缆、造鞋、设备制造、新能源…

Vue.js实现可编辑表格并高亮修改的单元格

实现一个可编辑的表格&#xff0c;让用户可以修改表格中的数据&#xff0c;并且能够清楚地看到哪些单元格被修改过。这样的功能可以提高用户体验&#xff0c;也方便后端处理数据的变化。 本文将介绍如何使用Vue.js和Element UI的el-table组件来实现一个可编辑表格&#xff0c;…

postcss-pxtorem实现页面自适应的原理

先声明一点这玩意本身不能实现哈&#xff0c;他只是一个工具&#xff0c;更是一个postcss的插件 帮助我们从px转化成为rem比如我们的代码 div {height: 100px;width: 100px; }经过这个插件转化之后变成 假设变成下面这样哈 div {height: 1rem;width: 1rem; }其他没啥子太大作…

GateWay网关介绍以及整合knife4j聚合所有服务的接口文档

为什么使用网关&#xff1f; 因为多个微服务的端口不同&#xff0c;前端调用不方便&#xff0c;使用网关可以统一接收处理前端的请求&#xff0c;同时方便接口的集中处理&#xff0c;比如鉴权、聚合接口文档、限流等等.. 这里使用Knife4j文档工具来实现接口文档&#xff1a;K…

【分布式微服务专题】从单体到分布式(二、SpringCloud整合Nacos)

目录 前言阅读对象阅读导航前置知识笔记正文一、下载安装二、项目整合2.1 服务注册与发现2.2 动态配置管理 三、其他实验四、服务之间的调用 学习总结感谢 前言 本篇笔记主要是记录我整合Nacos项目进来的过程。以实现服务注册发现&#xff0c;以及分布式配置管理。关于Nacos&a…

hive数据库查看参数/hive查看当前环境配置

文章目录 一、hive查看当前环境配置命令 在一次hive数据库执行命令 set ngmr.exec.modecluster时&#xff0c;想看一下 ngmr.exec.mode参数原先的值是什么&#xff0c;所以写一下本篇博文&#xff0c;讲一下怎么查看hive中的参数。 一、hive查看当前环境配置命令 set &#…

06 硬件知识入门(MOSS管)

1 简介 MOS管和三极管的驱动方式完全不一样&#xff0c;以NPN型三极管为例&#xff0c;base极以小电流打开三极管&#xff0c;此时三极管的集电极被打开&#xff0c;发射极的高电压会导入&#xff0c;此时电流&#xff1a;Ic IbIe &#xff1b;电压&#xff1a;Ue>Uc>Ub…

DBSCAN算法原理及其Python实现

文章目录 原理Python实现验证 原理 DBSCAN&#xff0c;即Density-Based Spatial Clustering of Applications with Noise&#xff0c;基于密度的噪声应用空间聚类。 在DBSCAN算法中&#xff0c;将数据点分为三类&#xff1a; 核心点&#xff1a;若样本 x i x_i xi​的 ε \v…

《深入理解计算机系统》学习笔记 - 第三课 - 浮点数

Floating Point 浮点数 文章目录 Floating Point 浮点数分数二进制示例能代表的数浮点数的表示方式浮点数编码规格化值规格化值编码示例 非规格化的值特殊值 示例IEEE 编码的一些特殊属性四舍五入&#xff0c;相加&#xff0c;相乘四舍五入四舍五入的模式二进制数的四舍五入 浮…

Linux 网络协议

1 网络基础 1.1 网络概念 网络是一组计算机或者网络设备通过有形的线缆或者无形的媒介如无线&#xff0c;连接起来&#xff0c;按照一定的规则&#xff0c;进行通讯的集合( 缺一不可 )。 5G的来临以及IPv6的不断普及&#xff0c;能够进行联网的设备将会是越来越多&#xff08…