Linux进程之进程的状态简述

news2024/11/28 20:55:22

文章目录

  • 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.coloradmin.cn/o/1216082.html

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

相关文章

demo(三)eurekaribbonhystrix----服务降级熔断

一、介绍&#xff1a; 1、雪崩&#xff1a; 多个微服务之间调用的时候&#xff0c;假如微服务A调用微服务B和微服务C&#xff0c;微服务B和微服务C又调用其他的微服务&#xff0c;这就是所谓的"扇出"。如果扇出的链路上某个微服务的调用响应的时间过长或者不可用&am…

开发者的第一台服务器 ECS云服务器低至99元:新老同享

“阿里云始终围绕‘稳定、安全、性能、成本、弹性’的目标不断创新&#xff0c;为客户创造业务价值。”10月31日&#xff0c;杭州云栖大会上&#xff0c;阿里云弹性计算计算产品线负责人张献涛表示&#xff0c;通过持续的产品和技术创新&#xff0c;阿里云发布了HPC优化实例等多…

Kubernetes(k8s)进阶

文章目录 Kubernetes进阶一、Namespace&#xff08;名称空间&#xff09;1.namespace介绍2.管理namespace查看namespace创建namespaceyaml文件配置namespace 二、Pod&#xff08;最小基本部署单元&#xff09;1.pod介绍2.管理pod创建并运行pod查看pod信息访问pod删除podyaml文件…

如何分析伦敦金的价格走势预测?

伦敦金作为国际黄金市场的重要指标&#xff0c;其价格走势一直备受投资者关注。但是&#xff0c;黄金市场的价格变化受到多种因素的影响&#xff0c;因此要准确预测伦敦金的价格走势并非易事。在本文中&#xff0c;将介绍一些常用的方法和工具&#xff0c;帮助您分析伦敦金的价…

挖掘PostgreSQL事务的“中间态”----更加严谨的数据一致性?

1.问题 今天在上班途中&#xff0c;中心的妹纸突然找我&#xff0c;非常温柔的找我帮忙看个数据库的报错。当然以我的性格&#xff0c;妹子找我的事情对我来说优先级肯定是最高的&#xff0c;所以立马放下手中的“小事”&#xff0c;转身向妹子走去。具体是一个什么样的问题呢…

vue部署之后提示用户更新的两种方式(http请求和worker线程请求)

const { writeFile, mkdir, existsSync } require(fs) // 动态生成版本号 const createVersion () > {// mkdir(./dist, { recursive: true }, (err) > {//检测dist目录是否存在if (existsSync(./dist)) {writeFile(./dist/version.json, {"version":"$…

【vue】0到1的常规vue3项目起步

创建项目并整理目录 npm init vuelatestjsconfig.json配置别名路径 配置别名路径可以在写代码时联想提示路径 {"compilerOptions" : {"baseUrl" : "./","paths" : {"/*":["src/*"]}} }elementPlus引入 1. 安装e…

新增文件收藏夹、回收站、终端等功能,1Panel开源面板v1.8.0发布

2023年11月13日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.8.0版本。 在这一版本中&#xff0c;1Panel新增文件收藏夹、回收站、终端功能&#xff0c;面板设置时支持设置面板监听地址。此外&#xff0c;1Panel开源项目组还进行了60多项功能更新和问题…

ICCV 23丨3D-VisTA:用于 3D 视觉和文本对齐的预训练Transformer

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2308.04352 开源代码&#xff1a;http://3d-vista.github.io 摘要&#xff1a; 3D视觉语言标定&#xff08;3D-VL&#xff09;是一个新兴领域&#xff0c;旨在将…

《C++避坑神器·十八》运算符重载,小白也能看懂

对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型 1、对于号运算符没有类 类 类&#xff0c;现在要给号赋予对象可以相加的功能 &#xff08;1&#xff09;成员函数重载号运算符 &#xff08;2&#xff09;全局函数重载号运算符 …

行情分析——加密货币市场大盘走势(11.16)

大饼昨日突然回调诱多上涨到38000附近&#xff0c;现在又重新跌回到37500&#xff0c;现在仓位小的可以加仓入场&#xff0c;而已经有仓位的不要动即可。 空单策略&#xff1a;入场37500附近 止盈34000-32000 止损39000 以太今日可以入场空单2060附近即可 策略&#xff1a;入…

Databend 源码阅读: Storage 概况和 Read Partitions

作者&#xff1a;zhyass | Databend Labs 成员&#xff0c;数据库研发工程师 ❤️ 友情提示&#xff1a;代码演进较快&#xff0c;请注意文档的时效性哦&#xff01; 引言 Databend 将存储引擎抽象成一个名为 Table 的接口&#xff0c;源码位于 query/catalog/src/table.rs。…

2023年9月 少儿编程 中国电子学会图形化编程等级考试Scratch编程一级真题解析(选择题)

2023年9月scratch编程等级考试一级真题 选择题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 1、下列哪项内容是不可以修改的 A、角色名称 B、造型名称 C、背景名称 D、舞台名称 答案&#xff1a;D 考点分析&#xff1a;考查scratch相关知识&am…

centos搭建docker镜像Harbor仓库的简明方法

在kubernetes集群中如果要部署springcloud这样的应用&#xff0c;就必须有一个自建的docker镜像中心仓库。 它的目的有两点&#xff1a; 1. 镜像拉取速度快 2. 开发好维护 而Harbor是一个非常好用的docker本地仓库 所以本篇文章来讲讲如何在部署Harbor仓库 首先系统版本最…

tegra nvidia agx xaiver 系统开机自动启动风扇配置方法

确保系统可以连接到互联网&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 1.更新系统软件源&#xff1a; sudo apt-get update2.安装pip工具 sudo apt-get install python-pip3.安装nvidia对应工具 sudo -H pip install jetson-stats4.打开NVI…

华为eNSP综合实验考试

VLAN信息表 设备名称 端口 链路类型 VLAN 参数 HZ-HZCampus-Agg01-S5731 GE0/0/1 Trunk PVID:1 Allow-pass&#xff1a;10 20 Eth-trunk1&#xff08;GE0/0/2,0/0/3,0/0/23&#xff09; Trunk PVID:1 Allow-pass&#xff1a;10 20 GE0/0/24 Access PVID&#xf…

Leetcode 33 搜索旋转排序数组

class Solution {//旋转数组从中间分开&#xff0c;总有一侧是有序的&#xff0c;一侧是无序的//只需要判断是否在有序区间就可以进行二分查找public int search(int[] nums, int target) {int left 0, right nums.length - 1;while(left < right){int mid (left right)…

小红书直播开启新纪元,拓世法宝AI直播一体机助您轻松成为行业标杆!

2023年&#xff0c;小红书终于成功坐上了电商牌桌。 今年3月的“董洁效应”带动了一批品牌商家、博主入驻小红书试水&#xff0c;其直播业务积蓄了巨大势能。10月15日&#xff0c;“初代名媛”章小蕙完成了在小红书的第二场直播&#xff0c;以销售额破亿的成绩打响了小红书双1…

Chrome开发者模式去除时间轴

经常用chrome调试&#xff0c;发现时间轴用的不多&#xff0c;想屏蔽掉。 参考&#xff1a;滑动验证页面 我做了截图记录下

众安保险面试题

文章目录 1.说一下Java内存模型?2.List、Set、Map的区别?3.介绍一下设计模式?4.MySQL存储结构?5.索引失效的场景?6.为什么使用函数索引会失效?7.Spring事务有哪两种?7.1 编程式事务@RestController7.2 声明式事务8.@Transactional实现原理?9.事务如何合并@Transactiona…