Linux进程详解三:进程状态

文章目录

    • 进程状态
    • Linux下的进程状态
      • 运行态-R
      • 阻塞态
        • 浅度休眠-S
        • 深度睡眠-D
        • 暂停状态-T
        • 暂停状态-t
      • 终止态
        • 僵尸-Z
        • 死亡-X
      • 孤儿进程

进程状态

进程的状态,本质上就是一个整型变量,在task_struct中的一个整型变量。

状态的存在决定了你的后续行为动作。

Linux中可能会存在多个进程都要根据它的状态执行后续的动作,并且进程可能会存在多个相同的状态,所以进程排队。

一个CPU一个进程队列。

当我们的进程在等待软硬件资源的时候,如果资源还没有就绪,我们的进程task_struct只能将自己设置为阻塞状态,并且将自己的pcb链入等待的资源提供的等待队列。

进程状态的变化,对应的(引起的)是pcb会被操作系统OS变迁到不同的队列中进行排队。

运行状态 R

阻塞状态
当一个进程在cpu的运行队列中,先时运行状态,但是这个进程需要的硬件资源还没有准备好,例如从键盘中读取数据,此时还没有读取到,此时操作系统会将这个进程从cpu的运行队列中拿下来,链入到键盘硬件相对应的排队队列中,并将这个进程的状态设置为阻塞状态,当进程从键盘中获取足够的资源的时候,操作系统再将这个进程拿到CPU的运行队列中重新进行排队。

挂起状态
阻塞挂起
当计算机的资源比较吃紧的时候,某个进程不运行,将其先写入磁盘从队列中取下,当资源充足时或者运行这个进程的时候再从磁盘中读取出来写入到内存,进行执行。

操作系统在被逼急了的情况下,是会杀掉进程的。

Linux下的进程状态

Linux内核下的进程状态

static const char *task_state_array[] = {"R (running)",      /*  0 */"S (sleeping)",     /*  1 */"D (disk sleep)",   /*  2 */"T (stopped)",      /*  4 */"T (tracing stop)", /*  8 */"Z (zombie)",       /* 16 */"X (dead)"      /* 32 */
};

前后台进程
前后台进程,前台进程可以直接杀掉,后台进程只能使用kill杀掉,状态带+就是前台进程,不带就是后台进程。

运行态-R

  • Running

阻塞态

浅度休眠-S
  • Sleeping
    阻塞态之一。
    休眠态,可中断睡眠,浅度睡眠
    进程处于浅度睡眠S状态的时候,可以使用Ctrl+C结束
    操作系统也可以杀掉这种状态的进程。
深度睡眠-D
  • Disk Sleep
    阻塞态之一。
    不可中断睡眠,深度睡眠,磁盘休眠
    操作系统不能杀掉这种状态的进程。
暂停状态-T
  • Stopped
    阻塞态之一
    进程处于暂停状态。
    用户可以主动将进程设置为暂停状态。
    当操作系统认为某个进程在做某种危险的行为的时候,操作系统也会将进程设置为暂停状态。
  • kill -19 pid
    让进程处于暂停状态
  • kill -18 pid
    让进程重新开始
暂停状态-t
  • Tracing stop
    阻塞状态之一。
    进程处于被追踪的状态,比如在调试的时候,等待某种资源。

终止态

僵尸-Z
  • Zombie
    一个进程已经执行完毕,但是当前并没有获取这个进程退出的相关数据时,此时这个进程的状态称之为僵尸状态。
    当一个进程执行完成之后,这个进程的代码和数据可以释放掉,但是其对应的PCB不能释放,需要保存供操作系统或者用户获取这个进程的退出信息。

为什么存在Z状态。
创建一个进程是希望这个进程给用户完成工作的,子进程必须得有结果数据,Pcb中的。

什么时Z状态。
进程已经退出了,但是当前的状态需要自己维持住,供上层读取,必须处于Z状态。

如果父进程不读取呢。
如果父进程不读取这个僵尸进程,僵尸状态的进程会一直存在。task_struct对象也要一直存在,需要占用着内存。此时会出现内存泄漏的问题。

所有的进程在退出的时候,都要先经过Z状态。

defunct : 无效的,死亡的。

死亡-X
  • Dead
    真正的死亡状态,进程真正的被销毁了。

孤儿进程

当父进程比子进程提前结束,父进程会被他的父进程bash回收,此时父进程被回收后,子进程就变成了孤儿,此时子进程会被1号进程领养,1号进程就是系统进程。此时子进程不仅变成了孤儿进程也变成了后台进程

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

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

相关文章

直接用表征还是润色改写?LLM用于文生图prompt语义增强的两种范式

直接用表征还是润色改写?LLM用于文生图prompt语义增强的两种范式 导语 目前的文生图模型大多数都是使用 CLIP text encoder 作为 prompt 文本编码器。众所周知,由于训练数据是从网络上爬取的简单图文对,CLIP 只能理解简单语义,而…

拿捏 顺序表(1)

目录 1. 顺序表的分类2. 顺序表实现3. 顺序表实现完整代码4. 总结 前言: 一天xxx想存储一组数据, 并且能够轻松的实现删除和增加, 此时数组大胆站出, 但是每次都需要遍历一遍数组, 来确定已经存储的元素个数, 太麻烦了, 于是迎来了顺序表不屑的调侃: 数组你不行啊… 顺序表是一…

第二期书生浦语大模型训练营第四次笔记

大模型微调技术 大模型微调是一种通过在预训练模型的基础上,有针对性地微调部分参数以适应特定任务需求的方法。 微调预训练模型的方法 微调所有层:将预训练模型的所有层都参与微调,以适应新的任务。 微调顶层:只微调预训练模型…

oracle 12c+ max_string_size参数

一个客户的数据库版本是19.3,在做数据库复制的时候,目标端报错了,查看了一下问题发现表的字段长度有不对,在12c以前我们都知道varchar的长度最大是4000,但是客户这里居然有32767: 把客户的建表语句弄出来,放到我的一个19c的测试环境进行测试: 发现报错了: 这里报错很明显了,是M…

学习c语音的自我感受

因为是自学,所以走过不少弯路。去年,受知乎“python性能弱”风潮的影响,学过go,rust。 在学习这些新语言的时候,由衷感受到,或是本身侧重方向的原因(如go侧重服务器),或是语言太新不…

uniapp——组件多颜色模块展示、气泡框

一、自定义颜色&#xff1a; 样式 代码 <template><view class"content"><!-- 右上角 --><view class"coverStatus" :class"[itemClass, positionClass,cornerClass,sanJiaoCss,sanJiaoCss2]":style"dynamicStyle&q…

python getsize如何使用

第一步&#xff0c;点击键盘 winr&#xff0c;打开运行窗口&#xff1b;在窗口中输入“cmd"&#xff0c;点击确定&#xff0c;打开windows命令行窗口。 第二步&#xff0c;在windows命令行窗口中&#xff0c;输入“python”&#xff0c;进入python交互窗口。 第三步&#…

笔记 | 嵌入式系统概论

1 嵌入式系统简介 1.1 嵌入式系统的定义 根据美国电气与电子工程师学会&#xff08;IEEE&#xff1a;Institute of Electrical and Electronics Engineers )的定义&#xff0c;嵌入式系统是用于控制、监视或辅助操作机器和设备的装置(原文: devices used to control, monitor…

WiFi、Ethenet、4G优先级切换

1、多网卡情况下如何调整优先级方案 按照目前公司前辈给出的方案&#xff0c;调整优先级的手段有两种&#xff1a; <1>.删除默认路由--route del 的方法 <2>.ifmetric源码提供的修改路由表的mteric的值来设置路由的优先级&#xff0c;metric越小优先级越高。 应…

ANSYS Help 的使用

ANSYS 帮助文档是相当实用且重要的第一手资料&#xff0c;90% 以上的纯操作问题都可以在帮助文档找到相关的解释。 点击开始菜单的 ANSYS Help即可打开帮助文档 帮助文档有两种打开方式&#xff1a; 基于帮助文档的安装包安装于本地后&#xff0c;可直接启动帮助程序没有安装…

Spring-IOC之组件扫描

版本 Spring Framework 6.0.9​ 1. 前言 通过自动扫描&#xff0c;Spring 会自动从扫描指定的包及其子包下的所有类&#xff0c;并根据类上的特定注解将该类装配到容器中&#xff0c;而无需在 XML 配置文件或 Java 配置类中逐一声明每一个 Bean。 支持的注解 Spring 支持一系…

书生·浦语大模型实战营之Llama 3 高效部署实践(LMDeploy 版)

书生浦语大模型实战营之Llama 3 高效部署实践&#xff08;LMDeploy 版&#xff09; 环境&#xff0c;模型准备LMDeploy chatTurmind和Transformer的速度对比LMDeploy模型量化(lite)LMDeploy服务(serve) 环境&#xff0c;模型准备 InternStudio 可以直接使用 studio-conda -t …

机器学习运用-民宿价格

项目简介 随着旅游业的蓬勃发展&#xff0c;民宿市场迎来了前所未有的增长机遇。正好最近在参加拓尔思数据挖掘公益实习活动&#xff0c;我的项目将应用机器学习技术开发一个价格预测模型。可以达到更好地理解和预测民宿价格的目的&#xff0c;该模型综合考虑了从容纳人数、便…

【Python】Python函数的黑魔法:递归,嵌套函数与装饰器

欢迎来到CILMY23的博客 本篇主题为&#xff1a; Python函数的黑魔法&#xff1a;递归&#xff0c;嵌套函数与装饰器 个人主页&#xff1a;CILMY23-CSDN博客 系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 感谢观看&#xff0c;支持的可以给个一键三连&#xff…

基于51单片机的矩阵按键扫描的proteus仿真

文章目录 一、按键按键按键消抖 二、独立按键仿真图仿真程序 三、矩阵按键仿真图仿真程序 四、总结 一、按键 按键 按键通常指的是电子设备上的一种输入装置&#xff0c;用于在按下时发送信号&#xff0c;以便设备执行相应的操作。按键可以分为独立按键和矩阵按键两种类型。 …

TRIZ理论下攀爬机器人的创新设计与研究

随着科技的飞速发展&#xff0c;机器人技术已广泛应用于各个领域。特别是在复杂环境下的作业&#xff0c;如灾难救援、太空探测等&#xff0c;对机器人的移动能力和适应性提出了更高要求。在这样的背景下&#xff0c;基于TRIZ理论的攀爬机器人设计与研究应运而生&#xff0c;它…

简单的图像处理算法

本笔记参考crazy_Bingo 基础&#xff1a; 图像处理都是用卷积矩阵对图像卷积计算&#xff0c;如3X3 的矩阵对640 X 480分辨率的图像卷积&#xff0c;最终会得到638 X 478 的图像。卷积过程是这样的&#xff1a; 一、中值滤波 &#xff1a; 找出矩阵中的最中间值作为像素点 中…

Flink的安装、项目创建、任务打包和部署完整实现,任务实现使用JAVA语言

Flink资源下载地址 Flink安装包下载地址 一、本地模式安装Flink 1、在Linux服务上&#xff0c;创建flink文件夹 mkdir flink 2、上传文件并解压 tar -zxvf flink-1.14.6-bin-scala_2.11.tgz 解压完成后&#xff0c;如图&#xff1a; 3、启动Flink 进入到解压目录下&#x…

YOLOv9训练损失、精度、mAP绘图功能 | 支持多结果对比,多结果绘在一个图片(消融实验、科研必备)

一、本文介绍 本文给大家带来的是YOLOv9系列的绘图功能&#xff0c;我将向大家介绍YOLO系列的绘图功能。我们在进行实验时&#xff0c;经常需要比较多个结果&#xff0c;针对这一问题&#xff0c;我写了点代码来解决这个问题&#xff0c;它可以根据训练结果绘制损失(loss)和mA…

Java的八大基本数据类型和 println 的介绍

前言 如果你有C语言的基础&#xff0c;这部分内容就会很简单&#xff0c;但是会有所不同~~ 这是我将要提到的八大基本数据类型&#xff1a; 注意&#xff0c;Java的数据类型是有符号的&#xff01;&#xff01;&#xff01;和C语言不同&#xff0c;Java不存在无符号的数据。 整…