Linux进程之进程的状态简述

文章目录

  • 1.百度搜索
  • 2.对进程状态的认识
    • 2.0创建状态
    • 2.1就绪状态
    • 2.2运行状态
    • 2.3阻塞状态
    • 2.4挂起状态
  • 3.认识LinuxOS下的进程
    • 3.0进程状态的简述
    • 3.1了解R/S状态
    • 3.2D深度睡眠状态
    • 3.3信号/调试暂停状态
    • 3.4僵尸状态

1.百度搜索

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.对进程状态的认识

一个进程所具有的状态为操作系统的进程状态设计提供了理论依据。实际上不同的操作系统设计不同的进程状态

2.0创建状态

当一个进程被创建但没有入队列,即代码和数据被拷贝➕建立PCB结构体➕ 为其分配一个唯一的进程标识符(PID)[不是不就绪的状态]实际上 linux内核不存在这种状态 这种状态只是为了更好的理解而描述的 在实际中 一个进程被创建后就会入运行队列

2.1就绪状态

进程已经满足运行条件,PCB进入CPU运行队列,排队等待系统分配CPU资源

2.2运行状态

PCB被调度到CPU运行队列中且已被分配CPU资源。只有运行状态下的进程才能占用CPU资源

2.3阻塞状态

阻塞状态

  1. 当一个进程因需要等待某些非CPU资源就绪无法继续执行时,就会进入阻塞状态。如: 等待用户输入、等待磁盘IO操作完成等。在阻塞状态下,进程会被调度到阻塞队列,不会占用CPU资源。只有当进程所等待的非CPU资源就绪后,进程才会从阻塞队列调度到运行队列(就绪状态)。
  2. 系统中存在各种资源: CPU 网卡 磁盘 显卡 等
  3. 系统中不只是存在一种队列 : CPU配套的运行队列 阻塞队列等
  4. 当运行队列某一进程需要使用磁盘资源比如要向磁盘写数据或必须使用磁盘进行操作 此时处于运行队列的这个进程会被安排到磁盘配套队列的后面排队
  5. 当磁盘配套的进程的第一个轮到访问进程时 此进程会插队到CPU的运行队列 CPU会执行当前进程对应的代码 这段代码的目的就是向磁盘写数据
  6. 当一个本处于CPU运行队列的进程因需要访问磁盘而去磁盘配套进程排队时 此时CPU会执行后面的其他进程 而此时等待磁盘资源就绪的那些进程 组成的队列叫阻塞队列
  7. 阻塞队列中的进程不是在等待CPU 所以无法称他们处于运行态 我们称他们处于 阻塞状态
  8. CPU被很多进程占满了资源或者 进程等待某种资源 长时间等不到调度
    在这里插入图片描述
    在这里插入图片描述

2.4挂起状态

  1. 当内存快不足时,操作系统会将长时间不执行或者处于低优先级状态的进程的代码和数据置换出内存并存储到磁盘上的SWAP分区中。
  2. PCB(进程控制块)仍存在进程表中。
  3. 被置换到磁盘中的进程的状态就叫做挂起。
  4. 挂起状态只是进程的一种状态,表示进程暂时无法执行,仍然需要保留进程的信息以便后续恢复执行。

目的意义作用

释放内存资源,给其他进程提供执行机会。

挂起状态

  1. 和进程访问某种资源关系不大
  2. 是内核和操作系统需要维护的状态

挂起状态的认识

在这里插入图片描述

  1. 由于进程太多 内存快被占满时 操作系统会将长时间不执行/无法执行(等待资源) 的进程的代码和数据 移到磁盘 (一个专门的分区[SWAP分区])
  2. 此时内存中只有一个PCB在
  3. 被移出的进程的状态就是挂起状态
  4. 处于挂起状态的进程需要运行时 不是把PCB放到运行队列 而是先把此进程的代码和数据从磁盘移回内存
  5. 挂起状态/阻塞状态和CPU无关

磁盘的SWAP分区会满吗?

  1. OS进行置换有成本: 进行IO工作 会影响效率 OS不太喜欢进行置换 除非迫不得已
  2. 如果磁盘趋于满 此时OS为了让进程得以执行 置换工作极为频繁 OS效率大幅下降 --> 宕机

3.认识LinuxOS下的进程

在这里插入图片描述

3.0进程状态的简述

  1. R运行状态(running): 进程正在运行或者在运行队列中等待
  2. S睡眠状态(sleeping) /可中断睡眠(interruptible sleep): 即阻塞状态 进程在等待某事件完成 (可被唤醒/中断 如程序中在执行sleep(10); 时 发送kill -19 PID信号)[(阻塞、挂起)]
  3. D休眠状态(Disk sleep)/不可中断睡眠状态(uninterruptible sleep): 磁盘休眠/进程休眠 进程通常会等待IO的结束(不可被中断 不可被唤醒)[(IO阻塞、IO挂起)]
  4. T信号暂停状态(stopped): 发送 SIGSTOP 信号来暂停进程。可以发送 SIGCONT 信号让进程继续运行。
  5. t调试暂停状态(tracing stop):进程被调试器(如gdb)跟踪调试,暂停了进程的执行。调试器设置了断点或执行了单步调试操作
  6. X死亡/终止状态(dead):多个进程终止 OS需要一个一个回收 但也是一瞬间的 瞬时性很强 只是一个返回状态,无法在任务列表看到这个状态。
  7. Z僵尸状态(zombie):一个已经终止的子进程,但其 父进程/OS 尚未检测到子进程的退出状态。
  • 不允许OS释放 处于一个被检测的状态]
  • 维持该状态 让父进程/OS识别并回收
  • 僵尸进程不会占用系统资源,已经终止并释放了大部分资源。
  • 僵尸进程只在进程表中保留一条记录,以便父进程在需要时获取子进程的退出状态。

3.1了解R/S状态

以下代码执行时 状态是S+

while(1)
{
   printf("hello linux!\n");
}
  1. 向显示器(外设)输出数据 显示器不一定准备好 即便准备好 也要等待数据 进程在阻塞队列中待的时间比运行队列长 表现为当前进程为阻塞状态
  2. 如果注释掉printf("hello linux!\n"); 进程的状态变为R+ 不需要访问外设 只运行代码 : 运行状态(可能在运行队列中等待可能正在被CPU调度/执行)

以下代码执行时 状态是S+

int a = 0;
sacnf("%d", &a);
while(1)
{
   printf("hello linux!\n");
}

等待输入 – 阻塞状态 S+

+号: 当前进程处于前台进程: 无法执行命令cmd 命令行解释器无法解释命令 可以ctrl+c终止 如何让他在后台执行?

./ test &.

如何杀死这个进程?

kill -9 PID

3.2D深度睡眠状态

在这里插入图片描述
为了省电省钱 企业会在午夜将磁盘转速降低 但是如果此时有大量进程需要访问磁盘 (状态为D) 而磁盘IO效率低下 将有更多的进程处于D状态 此时服务器压力过大 而OS又无法杀死他们 有可能造成OS昏迷或宕机

那么就需要了解以下DD命令

Linux DD命令是一种用于复制和转换文件的命令行工具。它可以从一个文件或设备复制数据,并将其写入另一个文件或设备。DD命令可以用于创建磁盘映像,备份和还原硬盘分区,以及在不同的数据存储格式之间进行转换。以下是一些DD命令的常见用法:

  1. 复制文件或设备
dd if=/dev/sda of=/dev/sdb

上述命令将/dev/sda设备的内容复制到/dev/sdb设备中。

  1. 创建磁盘映像
dd if=/dev/sda of=/path/to/image.img

上述命令将/dev/sda设备的内容复制到名为image.img的文件中。

  1. 转换数据格式
dd if=/path/to/input.img of=/dev/sda bs=512 conv=notrunc

上述命令将名为input.img的文件中的数据写入到/dev/sda设备中,并将块大小设置为512字节。"conv=notrunc"选项表示不截断输出文件。

3.3信号/调试暂停状态

  1. 当执行死循环时状态为R 发送kill -19 PID 进程暂停 状态为T(不是因为要访问某种资源而主动暂停 而是向他发信号 它被动暂停 ) 发送 kill -18 PID 进程继续 状态变为R
  2. 对test.c 打开gdb 设置断点 当执行./test 进程开始执行 遇到断点暂停 此时进程状态为t gdb进程状态为S (可以理解为gdb向test发送了kill- 19 PID )

3.4僵尸状态

int main()
{
    pid_t id = fork();
    if(id < 0)
    {
        //创建失败
        perror("fork");
        return 1;
    }
    else if(id == 0)
    {
        //child process(task)
        while(1)
        {
            printf("I am child, pid: %d, ppid: %d\n", getpid(), getppid());
            sleep(3);
            break;
        }
        exit(0);
    }
    else 
    {
        //parent process
        while(1)
        {
            printf("I am father, pid: %d, ppid: %d\n", getpid(), getppid());
            sleep(1);
        }
    }
    return 0;
}

在这里插入图片描述

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

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

相关文章

stm32f10系列--管脚被设置为输入模式时,对其进行输出操作将影响其输入功能

有时程序载入硬件&#xff0c;没有按代码执行&#xff0c;可能由于此。 1.欲完成功能&#xff1a; 结构&#xff1a;PA0管脚可以输出高低电平&#xff0c;控制LED灯的亮灭&#xff1b;PA1管脚作为输入&#xff0c;连接一头已经接地的switch开关。 逻辑&#xff1a;当开关闭合…

网络运维Day18

文章目录 环境准备导入数据确认表导入成功练习用表解析表格结构设计 查询语句进阶什么是MySQL函数常用功能函数数学计算流程控制函数查询结果处理 连接查询(联表查询)表关系什么是连接查询连接查询分类笛卡尔积内连接(INNER)外连接 子查询什么是子查询子查询出现的位置子查询练…

IEEE Standard for SystemVerilog—Chapter14. Clocking blocks

14.1 General This clause describes the following: — Clocking block declarations(时钟块声明) — Input and output skews(输入和输出偏斜) — Clocking block signal events(时钟块信号事件) — Cycle delays(周期延迟) — Synchronous events(同步事件) — Synchronous…

pytorch 安装 2023年

pytorch网址&#xff1a;https://pytorch.org/get-started/locally/ conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia我在自己电脑上用这个pip命令完全安装不了&#xff0c;只能用conda安装。复制上面提供的命令&#xff0c;在cmd中直接运…

在Linux安装Nginx Proxy Manager并结合内网穿透工具实现远程访问管理界面

文章目录 前言1. docker 一键安装2. 本地访问3. Linux 安装cpolar4. 配置公网访问地址5. 公网远程访问6. 固定公网地址 前言 Nginx Proxy Manager 是一个开源的反向代理工具&#xff0c;不需要了解太多 Nginx 或 Letsencrypt 的相关知识&#xff0c;即可快速将你的服务暴露到外…

北京筑龙:招商局“强管控”成就采购合规与效益统一

1872至2023&#xff0c;历时151年&#xff0c;跨越三个世纪。招商局集团&#xff0c;从洋务运动中国第一场“商战”挽回航运利权&#xff0c;到开辟中国首条近海商业航线和远洋商业航线&#xff1b;从独资开发中国第一个对外开放工业区&#xff0c;到开办中国第一家银行……敢为…

@Version乐观锁配置mybatis-plus使用(version)

1&#xff1a;首先在实体类的属性注解上使用Version import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.Versio…

EtherNET转Profibus网关使用欧姆龙PLC的配置方法

兴达易控EtherNET转Profibus网关&#xff08;XD-EPPB20&#xff09;是一款具有 Profibus 从站功能的通讯网关。EtherNET转Profibus网关主要功能是将 EtherNET/IP 设备接入到 PROFIBUS 网络中。 本网关连接到 Profibus 总线中做为从站使用&#xff0c;连接到 EtherNET/IP 总线中…

2023年亚太杯数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米&#xff0c;宽为12米&…

微星迫击炮b660m使用intel arc a750/770显卡功耗优化方法

bios 优化: 1,开机后持续点击“delete”键直到进入微星bios。 2,点击右上角选择我们熟悉的中文。 3,点击Settings--->高级---> pcie/Pci子系统设置 4,Native PCIE Enable : Enabled Native Aspm:允许

nginx服务器配置http/2

nginx服务器配置http/2 文章目录 nginx服务器配置http/21.安装nginx2.ssl证书2.1 创建ssl证书 3.配置nginx3.1 配置http/2 4.保存配置文件5.重启nginx6.测试 1.安装nginx 如果你没有安装nginx&#xff0c;可以参考这里&#xff1a;nginx教程 2.ssl证书 如果你没有ssl证书&…

全国各区县日照时长数据,逐月数据均有!

今天给大家分享的是全国各区县日照时长月数据&#xff0c;包括不同月份不同地区的日照时长。这些数据可以帮助我们了解不同地区在不同月份的日照情况&#xff0c;为能源利用、农业生产和气候变化研究提供参考。 基本信息 数据名称: 全国各区县日照时长月数据 数据格式: shpex…

鸿蒙LiteOs读源码教程+向LiteOS中添加一个系统调用

本文分为2个部分&#xff1a;第1部分简要介绍如何读鸿蒙Liteos源码&#xff0c;第2部分是实验向LiteOS中添加一个系统调用的完整过程。 前置资料&#xff1a; imx6ull开发板使用方式详解 源码下载 编译运行简单程序 Ubuntu虚拟机使用鸿蒙LiteOs操作系统常见错误汇总 一、鸿…

免费的网页采集器工具推荐有哪些

免费好用的全自动网页采集器工具有哪些&#xff1f; 本文精心挑选出三款主流优秀的数据采集器软件&#xff0c;列举出它们的差异和各自的优缺点&#xff0c;希望能帮助您找到最符合您需求的采集工具&#xff01; 目录 1. 火车头采集器工具 火车头采集器软件优点 不足之处 …

杨辉三角00

题目链接 杨辉三角 题目描述 注意点 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和 解答思路 从第一行开始&#xff0c;根据前一行计算该行的值 代码 class Solution {public List<List<Integer>> generate(int numRows) {List<List<…

5.0 Java API

API&#xff08;Application Programming Interface&#xff09;指的是应用程序编程接口&#xff0c;API可以让编程变得更加方便简单。Java也提供了大量API供程序开发者使用&#xff0c;即Java API。Java API指的就是JDK提供的各种功能的Java类库&#xff0c;如之前所讲的Array…

蒸汽流量计量表

数字化场景&#xff1a;蒸汽监测 定义 监测蒸汽流量 单位是 立方米 很难计算 等效碳排 不是按楼&#xff0c;也不是按层&#xff0c;比如宁波某园区&#xff0c;就6个蒸汽流量表 看懂蒸汽表&#xff0c;了解蒸发焓或潜热(hfg) 由于水是从0C加热到饱和温度的&#xff0c;它…

一招告别百度广告烦恼,同时效率提高100倍的几个常用搜索技巧!

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…

制作企业期刊的必备工具,这个很强!

制作企业期刊是一项重要的任务&#xff0c;它不仅可以帮助企业展示自己的品牌形象&#xff0c;还可以促进内部员工的交流和合作。为了制作出一份高质量的企业期刊&#xff0c;你需要一些必备的工具。今天&#xff0c;给大家分享一款实用的工具-------FLBOOK在线制作电子杂志平台…

记忆化搜索

记忆化搜索 在递归过程中&#xff0c;有许多分支被反复计算&#xff0c;会大大降低算法的执行效率。用记忆搜索&#xff0c;讲已经计算出来的结果保存起来&#xff0c;以后需要用到直接去除结果&#xff0c;避免重复运算。 题目链接 数不清的数 原本的代码 外面一层t的whil…