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

进程状态(Linux)

进程状态

Linux进程状态

Linux进程状态进程描述
R运行状态
S睡眠状态
D磁盘休眠状态
T停止状态
t被追踪状态(调试状态)
X死亡状态
Z僵死状态

其实大致也就可以分为三种运行阻塞挂起

运行状态

每个cpu里都有一个运行队列,进程在运行队列里,不管他是否正在被运行。这种进程就属于运行状态,也就是运行态,在Linux系统中就是R状态。cpu里有一个函数叫调度器,当一个进程要运行的时候,有调度器上传,cpu既可以运行该进程了。一个进程不是在cpu里一直运行,直到该进程运行完毕。而是运行一段时间,无论你是否运行完毕,都要退出。这个时间叫时间片。假设时间片是10毫秒,每个进程都只能运行10毫秒,然后后下来排队,其他进程运行。所以,在一段时间内,每个进程都可以运行。这种情况叫并发执行,一个cpu,一段时间内,多个进程都运行了。大量把进程从cpu上拿下来,放上去,就叫进程切换

阻塞状态

当一个进程为了等待某种资源时,而处于等待状态的进程就属于阻塞状态,一般是放到等待队列里。比如一个进程需要等待键盘设备,操作系统考虑到既然该进程需要依靠其他进程或者数据等才能运行,就不会把它放到运行队列中。而是会把它放到等待队列中,直到他需要的进程或者数据等准备好了,才会把该进程放到运行队列。此时该进程的状态就是,阻塞状态。

挂起状态

还是刚刚,那个情景,该进程需要等待键盘外设,可是突然内存资源严重不足。操作系统就会把该进程的代码和数据放到磁盘上,减轻内存压力,只保留PCB。此时该进程的状态就是挂起状态,更准确说是阻塞挂起状态,因为PCB还是保留在等待队列中。有些地方会把挂起状态进行很多分类。其实,都是挂起状态,记一个就好。当一个进程的PCB保留在内存中,代码和数据却在磁盘上,此时该进程就是挂起状态

接下来我们看看Linux进程状态的分类

R,运行状态,一般情况是查不到这个状态的。因为CPU的运行特别块,你几乎察觉不到,是瞬时的。

S和D分别时浅度睡眠和深度睡眠两种状态,浅度睡眠可以被唤醒,深度睡眠除了断电没有办法阻止。咱们先不管他是什么深浅睡眠,既然是睡眠状态,那就表明该进程目前不运行,当这个进程是为了等待某种资源而进入睡眠,那他就是阻塞状态。但是,如果他就是单纯的进入睡眠状态,不是为了等待某种资源,那他就是普通睡眠状态。

sleep(1)

使用sleep函数可以使进程进入浅度睡眠

那什么是深度睡眠呢?深度睡眠是指当进程在执行某项重要任务时,不可以突然的终止执行,为了防止资源泄露等问题,给该进程了一种权限,谁也不可以终止该进程,直到该进程运行完毕,即使该进程为了等待硬件的资源,而处于等待队列里,也不可以终止该进程。比如,io流输出的时候,向磁盘写入的时候。注意,操作系统也不可以终止该进程。

T和t两种状态分别是停止状态和被追踪停止状态,T状态可以通过SIGSTOP信号停止进程,通过SIGCONT信号继续运行。t状态,一般就是gdb调式的时候,可以任意打断点,停止进程。

X是死亡状态,就是进程被杀死时状态,是瞬时的,一般查不到。Z是僵尸状态,当一个进程结束运行时,会短暂处于这个状态,等待父进程回收。如果,该父进程一直不回收,那子进程就一直处于Z状态,该进程也叫僵尸进程,操作系统会一直维护这个进程,如果僵尸进程过多,就会导致内存资源浪费,内存泄漏,等等

孤儿进程

当一个子进程的父进程提前退出,而子进程却在运行的时候,此时,该进程就是孤儿进程。因为他没有父进程回收,这会导致内存泄漏。操作系统为了处理这个麻烦,就会让1号进程回收该进程,比如bash命令行。

进程的其他概念

竞争性:系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高 效完成任务,更合理竞争相关资源,便具有了优先级

独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰

并发:多个进程在1个cpu采取进程切换,在一段时间内,让多个进程得以推进

进程切换,使用到两个队列,当时间片完,一个进程无论是否执行完,都要切换另一个队列。

并行:多个进程在多个cpu同时进行

cpu里的寄存器

两个问题:

函数返回值如何获取?通过寄存器存储,获取。

系统如何得知进程执行情况?程序计数器pc,eip记录进程执行指令的下一行指令地址。本质是寄存器

常见寄存器有:eax,ecx,ebx,edx

关于栈的寄存器有:ebp,esp

指令寄存器:eip

cpu里的寄存器,记录正在运行的进程数据。我们把这种数据叫做上下文。简单说就是,上下文就是寄存器记录的进程相关数据。

当进程退出的时候,需要把他的上下文数据保存并带走。保存的目的是为了恢复,因为进程再次运行的时候,需要从上次运行的地方继续运行。


文章转载自:

http://zoTF5NOi.pywLr.cn
http://sHxeJQkE.pywLr.cn
http://snRunoMX.pywLr.cn
http://E6ovcCqj.pywLr.cn
http://WsXYHFrE.pywLr.cn
http://NjhXYULp.pywLr.cn
http://mwAYAeH9.pywLr.cn
http://RUlyF1tB.pywLr.cn
http://b9piMiKs.pywLr.cn
http://ezHxvL0v.pywLr.cn
http://nUjHsont.pywLr.cn
http://K15jLIvQ.pywLr.cn
http://7LLIka1z.pywLr.cn
http://aeIMwAve.pywLr.cn
http://OmkisZxt.pywLr.cn
http://3WwLtb66.pywLr.cn
http://VVoMscaB.pywLr.cn
http://2J3xn0iw.pywLr.cn
http://ambJNPHa.pywLr.cn
http://r1XRK2He.pywLr.cn
http://FRQ9hzdn.pywLr.cn
http://TtU9JAvh.pywLr.cn
http://lTP7AU31.pywLr.cn
http://TGukFLBE.pywLr.cn
http://WVQC7kZ9.pywLr.cn
http://zxBlRgba.pywLr.cn
http://yPUpAEmt.pywLr.cn
http://LPtpGSsz.pywLr.cn
http://EVlgu1Ou.pywLr.cn
http://1CGjksJf.pywLr.cn
http://www.dtcms.com/a/376186.html

相关文章:

  • Linux负载如何判断服务器的压力
  • 【网络编程】从与 TCP 服务器的对比中探讨出 UDP 协议服务器的并发方案(C 语言)
  • 第4讲 机器学习基础概念
  • 新加坡服务器连接速度变慢应该做哪些检查
  • Elasticsearch启动失败?5步修复权限问题
  • HR软件选型指南:SaaS还是本地部署好?
  • 基于51单片机简易计算器仿真设计(proteus仿真+程序+嘉立创原理图PCB+设计报告)
  • matlab基本操作和矩阵输入-台大郭彦甫视频
  • Power BI制作指标达成跟踪器
  • 邪修实战系列(3)
  • Mac m系列芯片向日葵打不开 解决方案
  • 【Unity Shader学习笔记】(七)顶点着色器
  • 宋红康 JVM 笔记 Day16|垃圾回收相关概念
  • 信号与系统
  • 第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(5、机甲战士)
  • NW597NW605美光固态闪存NW613NW614
  • C语言-指针用法概述
  • Jakarta EE课程 微型资料投递与分发 实验指导(付完整版代码)
  • 基于autoawq进行qwen3 的awq量化
  • ⸢ 肆 ⸥ ⤳ 默认安全建设方案:c-2.增量风险管控
  • Windows系统下KingbaseES数据库保姆级安装教程(附常见问题解决)
  • Python实现讯飞星火大模型Spark4.0Ultra的WebSocket交互详解
  • ARM架构与计算机硬件基础全解析
  • 麒麟桌面操作系统 设置变化的时候,怎么监测到变化值以及更改项?
  • Reactor模式
  • Java-Spring入门指南(五)Spring自动装配
  • 必知必会:词向量构建方法(Word2Vec、ELMo、BERT)、聚类性质的句子向量构建方法(SBERT、SimCSE )
  • 查找算法(Java)
  • 计算机视觉----opencv高级操作(上采样,下采样,拉普拉斯金字塔,图像数值的统计)
  • 【华为OD】阿里巴巴找黄金宝箱