【lesson10】进程状态

文章目录

  • 认识进程状态
    • 新建
    • 运行
    • 阻塞
    • 挂起
  • Linux具体的进程状态
    • R
    • S
    • D
    • t
    • T
    • X
    • Z
    • 是什么
    • 为什么

认识进程状态

在这里插入图片描述
上面就是各种进程状态,上面都是理论进程状态理论进程状态放在哪个操作系统中都是正确的,但是具体的操作系统实现可能又会有所不同。
下面我们来理解进程状态:

其实进程状态就是进程PCB结构体中定义的一个status变量,我们知道改变status就是改变进程的状态。
在这里插入图片描述

新建

字面意思,进程刚刚被创建的状态

运行

task_struct结构体在运行队列中排队的情况,就叫做运行状态。
在这里插入图片描述
有人会有疑问task_struct结构体只是在排队又不是正在被执行,怎么能叫做运行态呢?
例子理解:
比如张三在食堂排队准备吃饭,这是他的舍友李四打电话过来问张三你在干嘛,张三会说我在吃饭啊。
这时候张三正在吃放吗?并没有只是在排队。这也就理解了上面的问题。

阻塞

等待非CPU资源就绪的状态就叫阻塞状态。

系统中一定是存在各种资源的,不仅仅是CPU资源,还有网卡、磁盘、显卡等其它设备。
我们使用CPU资源就需要运行队列,所以可想而知OS中一定不仅仅值存在一种队列。
在这里插入图片描述
例子:
在这里插入图片描述
运行结果:
在这里插入图片描述
我们可以看到,程序一直在等我们键盘输入数据,如果我们一直不输入数据,就是等待键盘数据资源就绪。而这个进程的状态就是阻塞状态。

挂起

在这里插入图片描述
当内存开不足的时候,OS操作系统会将长时间不执行的进程代码和数据换出到磁盘中。也就是SWAP分区中。所以我们自己安装系统的时候,一般我们会自动分出一个SWAP分区。
在这里插入图片描述
例子理解:
假设你们学校旁边发生了山体滑坡,而国家排军队来帮助周边村民保护各种财产。但是这些士兵没有地方住,于是你们学校被政府告知要安排这些士兵的住处,但是学校宿舍不够,于是校领导安排你们先回家,等灾情结束士兵们离开你们再回来。
那么你们离开学校相当于被学校开除了吗?
当然不是,你们的个人信息还在学校的教务处中,你们知识肉体离开了学校。
所以同理推广到挂起。挂起的时候进程的PCB结构体还在内存中,只不过代码和数据被放入到SWAP分区中了。

结论:当内存不足的时候,OS通过适当的置换进程的代码和数据到磁盘中,这个进程的状态就叫挂起。

Linux具体的进程状态

循环监测进程指令:

while :; do ps axj | head -1 && ps axj | grep mytest | grep -v grep; sleep 1; echo "########################"; done

R

R:运行状态
演示:
在这里插入图片描述
运行代码,监测进程:
在这里插入图片描述
我们运行代码的时候监测进程,我们发现进程是S状态,这是为什么呢?不应该是R状态吗?因为printf()需要访问外设,而访问外设速度的慢所以需要等待外设资源就绪,所以就不是运行态。我们接下来把printf去掉看看进程状态。
在这里插入图片描述
在这里插入图片描述
我们发现此时进程的状态就变为R状态

S

S:阻塞状态、等待状态、睡眠状态(可中断睡眠)
演示:
在这里插入图片描述
运行代码和监测:
在这里插入图片描述
我们看到,该进程为S状态。
这里我们看到不管是之前的R还是现在的S后面都跟了+号,那么这个+号表明什么意思呢?
+号说明该进程属于前台进程,在运行是输入任何指令都无效。
我们可以把前台进程变成后台进程,这样进程运行就不影响我们输入指令了。那么如何变成后台进程。
就比如下面这个死循环代码正常情况下它会一直死循环一直占用窗口,我们不能输入任何指令,但是我们把它变成后台进程呢?
在这里插入图片描述
在这里插入图片描述
我们可以看到,还能输入指令并且进程还存在,只不过变为了后台进程。

D

D:磁盘睡眠,也被称为不可中断睡眠。
例子:
当我们进程需要向磁盘写入大量数据的时候,进程需要等待数据写入是否成功的结果。
在这里插入图片描述
假如当前服务器压力过大的时候,OS通过一定的手段,杀掉一些进程,来起节省空间的作用。可就在这时候进程A被杀掉了,这样就导致了大量的数据流失。
所以将这里的进程被设为D状态,并且告知操作系统D状态的进程一定不能杀掉。

dd命令能够演示D状态进程。

t

t:调试状态,当用gdb调试代码的时候,这个进程会被称为t状态。
演示:
在这里插入图片描述

T

T:暂停状态
在这里插入图片描述
我们可以看到T状态就是代码暂停,发送19号信号可以触发T状态,发送18信号可以恢复原状态。
在这里插入图片描述
我们可以看到确实恢复了。

X

X:终止 瞬时性非常强
当进程退出需要操作系统回收资源,而操作系统此时特别忙,进程就会暂时的进入X状态。

Z

Z:僵尸状态

是什么

例子:
假如张三有晨跑的习惯,今天张三正在晨跑,而此时李四飞一样的从张三面前跑过去。但是没跑出去多远,李四就倒在了路上,张三过去查看发现没呼吸和心跳了。于是张三打了120,和110没过多久120和110同时赶来。110立马封锁现场,120查看发现确实已经没救了。于是110立马请来法医调查死者死因,最后发现是经常不规律睡觉然后跑步猝死的。于是110立马通知死者家属,并且拉走死者一天。

上面例子可推广到进程:一个进程已经退出,但是还不允许被OS释放,处于一个被检测的状态,叫做僵尸状态。

为什么会不允许被OS释放呢?
因为父进程或者操作系统可能需要该进程的运行返回值或者其它返回结果,而父进程或者OS还在忙其它事情所以还不允许被释放。

那么该进程一般是谁回收的呢?
一般是父进程或者OS回收。

为什么

那么维持僵尸状态是为什么呢?
维持该状态是为了让父进程或者OS获取该进程运行结果和回收的。
代码演示僵尸进程:
在这里插入图片描述
运行:
在这里插入图片描述
本代码子进程运行几次就退出,而父进程一直在运行,所以子进程就一直处在僵尸状态。

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

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

相关文章

springBoot对接多个mq并且实现延迟队列---未完待续

mq调用流程 创建消息转换器 package com.wd.config;import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.context.annotation.Bean; import o…

Vue的详细教程--Vue路由与nodejs

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Vue的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Vue路由是什么 二.使用Vue路由的步骤 1、…

小程序中如何划分会员级别以及不同级别不同积分累计、折扣、返佣、升级条件等

以下是一些关键步骤和注意事项,帮助商家在小程序中有效设置会员卡等级和相关规则。 1. 设定会员卡等级。在管理员后台->会员管理处,点击“等级...”。会出现级别设置界面。 可以创建会员卡等级,并为每个等级设定名称和对应的规则。一般会员…

MyBatis 日志模块

文章目录 前言LogLogFactory日志应用JDBC 日志BaseJdbcLoggerConnectionLogger应用实现 总结 前言 日志在我们开发过程中占据了一个非常重要的地位,是开发和运维管理之间的桥梁,在Java中的日志框架也非常多,Log4j、Log4j2、slf4j等&#xff…

创建表

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 创建表 语法格式: create table 表名(列名1 数据类型,列名2 数据类型,... ,列名n, 数据类型 ); 练习:在czwbkl库中,创建一格test01表 跟大家说…

开发高性能知识付费平台:关键技术策略

引言 在构建知识付费平台时,高性能是确保用户满意度和平台成功的关键因素之一。本文将探讨一些关键的技术策略,帮助开发者打造高性能的知识付费平台。 1. 前端性能优化 使用CDN加速资源加载 使用内容分发网络(CDN)来托管和加…

Flask数据库之SQLAlchemy--介绍--链接数据库

目录 SQLAlchemy介绍 SQLAlchemy连接数据库 SQLAlchemy介绍 数据库是一个网站的基础!!! 比如MySQL、MongoDB、SQLite、PostgreSQL等,这里我们以MySQL为例进行讲解。 SQLAlchemy是一个ORM框架 对象关系映射(英语&…

第一个 Go 程序“hello,world“ 与 main 函数

第一个 Go 程序"hello,world" 与 main 函数 文章目录 第一个 Go 程序"hello,world" 与 main 函数一.创建“hello,world”示例程序二. “hello,world” 程序结构拆解三、main 函数四、Go 语言中程序是怎么编译…

Xpath使用

有如下网页: 需要选中“若出现" 操作如下: 打开Xpath Helper 选中"若出现",右击检查 复制对应的Xpath 在QUERY栏插入即可

[杂谈]-快速了解半波和全波整流

快速了解半波和全波整流 文章目录 快速了解半波和全波整流1、滤波2、半波整流器3、全波整流器4、常见问题 整流器是一种将交流信号转换为脉动直流信号以及将交流电转换为直流电的电子电路。 我们日常生活中几乎所有的电子项目都会用到它。 根据周期传导,本文我们介绍…

VisualBox QA

出现提示注册表错误,或者之前正常,重启VisualBox后,VM运行失败时,可通过正确卸载VisualBox,然后使用注册表清理软件(CCleaner)清理注册表后,重装VisualBox,即会正常。(一般用这个能解…

自学网络安全的三个必经阶段(含路线图)

一、为什么选择网络安全? 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地,网络安全行业地位、薪资随之水涨船高。 未来3-5年,是安全行业的黄金发展期,提前踏入…

「UG/NX」BlockUI 选择小平面区域 Select Facet Region

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C」C/C程序设计「Win」Windows程序设计「DSA」数据结构与算法「File」数据文件格式 目录 控件说…

vue3+ts 实现移动端分页

current 开始页码 pageSize 结束页码 const sizeref<number>(10) //一页显示十条 const eachCurrentPageref<number>(1) //默认是第一页interface ITdata {current: number,pageSize: number,// xxxx 其他参数... } const selectApplyList ref<…

Verilog 不同编码风格对综合电路的影响

文章目录 示例 #1示例 #2示例 #3 Verilog是一种硬件描述语言&#xff08;HDL&#xff09;&#xff0c;用于设计数字电路和系统。统一、良好的代码编写风格&#xff0c;可以提高代码的可维护性和可读性。 同样的功能&#xff0c;不同的Verilog 编码风格也会对综合过程产生重大影…

1787_函数指针的使用

全部学习汇总&#xff1a;GitHub - GreyZhang/c_basic: little bits of c. 前阵子似乎写了不少错代码&#xff0c;因为对函数指针的理解还不够。今天晚上似乎总算是梳理出了一点眉目&#xff0c;在先前自己写过的代码工程中做一下测试。 先前实现过一个归并排序算法&#xff0c…

【Java毕设项目】基于SpringBoot+Vue校园便利平台的设计与实现

博主主页&#xff1a;一季春秋博主简介&#xff1a;专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发&#xff0c;远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容&#xff1a;毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题…

【LeetCode-中等题】513. 找树左下角的值

文章目录 题目方法一&#xff1a;前序递归方法二&#xff1a;层序遍历 题目 方法一&#xff1a;前序递归 在递归遍历到叶子结点时&#xff0c;对比此时的节点深度&#xff0c;若当前节点深度大于当前最大深度&#xff0c;就更新value值&#xff0c;最后记录下的value即为最下最…

2023.9.23(对这一年过去几个月的总结)

这个时间点杭州正在开亚运会&#xff0c;周六&#xff0c;大周&#xff0c;难得的大周&#xff0c;早上在公司健身房跑完步&#xff0c;就来工位看书了。 反思一下&#xff1a; 技术&#xff1a; 今年在技术学习上的目标&#xff0c;达成率是在太低&#xff0c;但看文章输出来…

手摸手图解 CodeWhisperer 的安装使用

CodeWhisperer 是亚⻢逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术&#xff0c;观点…