【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:Linux从入门到精通⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学更多操作系统知识
  🔝🔝


在这里插入图片描述

Linux进程

  • 1. 前言
  • 2. 操作系统中进程的运行状态
  • 3. 操作系统中进程的阻塞状态
  • 4. 操作系统中进程的挂起状态
  • 5. Linux下特定的进程状态
  • 6. 前台进程和后台进程的区别
  • 7. 休眠状态和磁盘休眠状态
  • 8. 总结以及拓展

1. 前言

很明显,进程状态的本质就是进程
PCB结构体中的一个变量,它可能
是用宏定义来实现的,也可能是其他方式

#define NEW 1
#define RUNNING 2
#define BLOCK 3
strcut PCB
{...其他信息int state;//进程状态
}
if(PCB->state==NEW)
{将进程放入运行队列}
else if(PCB->state==BLOCK)
{将进程放入阻塞队列}
......

本章重点:

本篇文章着重讲究操作系统中的
三种进程状态:运行状态,阻塞状态
挂起状态.并且讲解Linux操作系统
中具体的进程状态,其中R状态(运行状态)
和S状态(睡眠状态)最常见!

Linux中常见的六种状态:

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

还有一种状态就是z状态(僵尸状态)


2. 操作系统中进程的运行状态

现在我们使用的电脑,手机有四核的
有八核,十二核的,也就是有多个CPU
然而不管有多少个CPU,每一个CPU
都有一个对应的运行队列,CPU会去
此队列中寻找数据来做处理

在这里插入图片描述

只要一个进程在运行队列中,它就是运行状态

不管一个进程是否正在被处理,只要它在
运行队列中,那么它就是处于运行状态!


3. 操作系统中进程的阻塞状态

我先来描述一下进程会阻塞的情况:

当CPU处理一个PCB时,我们写的
代码中或多或少会去访问操作系统
里的某些资源,比如:磁盘,键盘,网卡

最简单的例子,当代码出现scanf
或者cin时,系统会等待用户输入,只要
不输入,要访问的资源就没有就绪
此时代码就无法运行!

在这里插入图片描述

此时进程就处于阻塞状态了吗?
对!但是不完全对!
我想给大家阐述的更细致一点

我们知道,系统中的硬件是通过
管理硬件数据来间接被操作系统
管理起来的,所以操作系统是很清楚
硬件现在是否具备访问条件,那么
操作系统是怎样知道的呢?
其实每一个设备的结构体中,都有
变量:PCB* wait_queue,也就是
等待队列,请看下图仔细分析:

在这里插入图片描述

将一个进程从运行队列移动至设备
的等待队列中,再将状态改为阻塞
此时这个进程就处于阻塞状态

每个CPU或是设备都有自己的队列
进程状态变化的本质就是:

  1. 更改PCB中status的整数变量
  2. 将PCB链接到不同的队列中!

4. 操作系统中进程的挂起状态

想象一下以下情况

如果现在有很多进程被阻塞(不同设备)
注定了这些进程在它所等待的资源没有
就绪的时候,该进程是无法被调度的,如果
此时,恰好操作系统的内存资源已经严重不足
那么现在应该这样做才能拯救操作系统呢?

答案是,因为此时进程处于阻塞
状态,并且内存已严重不足,所以
OS会将PCB对应的数据和代码
弄到磁盘,为内存腾出一部分空间
此时,进程就被挂起了!

在这里插入图片描述

注意,将内存数据换到外设上
这一操作是针对所有阻塞进程的
不用担心与外设频繁交互会降低
操作系统的效率,因为此时要关心
的是操作系统还能不能存活下去!
注意,swap分区是磁盘中真实存在的
它的大小往往是很小的,这个部分专门
用于内存严重不足时和内存进行交互
并且当内存情况缓解后,曾经被置换
出去的代码和数据又会重新加载进来!

5. Linux下特定的进程状态

先来看看我在库中找的状态的定义:

在这里插入图片描述

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

今天的主角是R和S状态
先来写一段程序来看看效果:

#include <stdio.h>    
#include <unistd.h>    
int main()    
{    while(1)    {    sleep(1);    printf("hello hdu\n");    }                                                                                                                                                                   return 0;    
}  

运行此程序后查看进程状态:

在这里插入图片描述

按照常理来说,一个正在运行的程序
应该是处于R状态的,但是这个程序
为什么处于S状态呢(+号先不管,后面会讲)

这是因为循环打印时,IO输出是很慢的
打印字符会和外设屏幕交互,所以大
部分时间进程都处于阻塞状态,可能
只有百分之1的时间在打印,所以查看
进程状态时,大部分都是S状态,只有很少
一部分是R状态但是如果while(1)中
什么代码都没有,则程序一直处于R状态


6. 前台进程和后台进程的区别

我先给出概念再来解释:

  • 前台进程:运行时无法使用bash外壳的指令
    并且可以被CTRL C强制终止掉

  • 后台进程:运行时可输入指令,不能被CTRL C掉
    只能使用kill指令来杀掉进程.

将程序变成后台程序:

运行进程时加上: &
如: ./mybin &

先来对比观察一下前后台进程:

前台进程和后台进程区别


7. 休眠状态和磁盘休眠状态

细心的同学可能已经发现了
这几种状态中有两个很相似的状态:
在这里插入图片描述
S被称为浅度睡眠
D被称为深度睡眠

想象一下下面的这种情况:

我们从QQ,微信上下载一个文件
本质上就是将数据拷贝至磁盘,但是
目前这个文件很大,需要拷贝很久
但是此时操作系统的内存恰恰不足了
需要干掉一些进程来保证操作系统存活
此时若恰好将正在拷贝到磁盘的进程杀掉
了,那么也就是拷贝失败了,如果文件非常
的重要,那么操作系统就要背锅了,所以
OS创造了D状态:磁盘休眠状态!

所以我们得出一个重要的结论:

  1. S(sleeping):浅度休眠,浅度睡眠,可以被终止
  2. D(disk sleep):深度休眠,为了防止向磁盘写入
    重要资源时被杀掉而专门创建的一个分类!

8. 总结以及拓展

了解Linux中进程的分类可以更进一步
的了解进程在操作系统中的运行关系
所以进程状态是学习进程中必不可少的
一课!我们和进程的故事还远远没有结束!

拓展阅读:什么是僵尸进程?

什么是僵尸进程


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

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

相关文章

十五、异常(5)

本章概要 异常限制构造器 异常限制 当覆盖方法的时候&#xff0c;只能抛出在基类方法的异常说明里列出的那些异常。这个限制很有用&#xff0c;因为这意味着与基类一起工作的代码&#xff0c;也能和导出类一起正常工作&#xff08;这是面向对象的基本概念&#xff09;&#…

大话机器学习准确率(Accuracy)、精确率(Pecision)、召回率(Recall)以及TP、FP、TN、FN

话说三国时期&#xff0c;乱世出人才&#xff0c;当时刘备让张飞帮忙招兵买马&#xff0c;寻找人才。张飞发公告以后&#xff0c;有10人来面试&#xff0c;这10人分为两类&#xff0c;人才和庸才&#xff0c;各占百分之五十&#xff0c;张飞的主要作用就是从这10人中识别出人才…

UWB PDOA定位原理

以下是笔记总结,内容不完全正确 1,什么是PDOA PDOA &#xff0c;英文全称是Phase-Difference-of-Arrival&#xff0c;信号到达相位差 PDOA定位算法的原理如下&#xff1a; UWB基站上放置两个相同且间隔d<λ/2的天线&#xff0c;UWB标签上的信号到达两个天线的相位差就在-180…

Docker Cgroups资源控制

Cgroup资源控制 Docker 通过 Cgroup 来控制容器使用的资源配额&#xff0c;包括 CPU、内存、磁盘三大方面&#xff0c; 基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 ControlGroups 的缩写&#xff0c;是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源…

无为WiFi的一批服务器

我们在多个地区拥有高速服务器&#xff0c;保证网速给力&#xff0c;刷片无压力 嘿嘿 <?phpinclude("./includes/common.php"); $actisset($_GET[act])?daddslashes($_GET[act]):null; $urldaddslashes($_GET[url]); $authcodedaddslashes($_GET[authcode]);he…

多无人机编队集群飞行

matlab2016b可直接运行 多无人机集群编队飞行&#xff08;8架无人机&#xff09;资源-CSDN文库

逻辑回归评分卡

文章目录 一、基础知识点(1)逻辑回归表达式(2)sigmoid函数的导数损失函数(Cross-entropy, 交叉熵损失函数)交叉熵求导准确率计算评估指标 二、导入库和数据集导入库读取数据 三、分析与训练四、模型评价ROC曲线KS值再做特征筛选生成报告 五、行为评分卡模型表现总结 一、基础知…

manual control lost 飞机乱飞

Gazebo或jmavsim里仿真都这样&#xff0c;突然QGC会出现 manual control lost&#xff0c;然后飞机会乱飞 解决方案1&#xff1a; 把 NAV_RCL_ACT 设置为 Disable&#xff0c;相当于关闭遥控器丢失失效保护&#xff0c;默认是Return返航&#xff0c;所以会乱飞。 解决方案2&a…

实体机 安装 centos

实体机 安装 centos 制作U盘的时候&#xff0c;使用的ultraISO 同样方法一个u盘制作的有问题&#xff0c; 另外一个制作的没有问题。 可能和选择 usb-hdd 或者 usb-hdd 有关 https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/ 参考文档&#xff1a; http:…

《Python 自动化办公应用大全》书籍推荐(包邮送书五本)

前言 随着科技的快速发展和智能化办公的需求增加&#xff0c;Python自动化办公成为了一种趋势。Python作为一种高级编程语言&#xff0c;具有简单易学、功能强大和开放源代码等优势&#xff0c;可以帮助我们更高效地完成日常办公任务。 Python自动化办公还可以帮助我们实现更…

华为数通方向HCIP-DataCom H12-831题库(单选题:221-240)

第221题 以下哪些项能被正则表达式^30.成功匹配? A、200 100 300 B、100 200 300 C、300 200 100 D、300 100 200 答案:CD 解析: 30.其中的“点”表示的是任何的一个数字,表示的是as-path的开头;所以以300开头的都是满足题目需求的。 第222题 以下哪些项的Community属性能…

厌烦了iPhone默认的热点名称?如何更改iPhone上的热点名称

你对你默认的热点名称感到厌倦了吗&#xff1f;这篇文章是为你准备的。在这里&#xff0c;你可以了解如何轻松更改iPhone上的热点名称。 个人热点会将你的手机数据转换为Wi-Fi信号。手机上的个人热点使用户能够与其他用户共享其蜂窝数据连接。当你在WIFI网络之外时&#xff0c…

时序预测 | MATLAB实现ICEEMDAN-IMPA-GRU时间序列预测

时序预测 | MATLAB实现ICEEMDAN-IMPA-GRU时间序列预测 目录 时序预测 | MATLAB实现ICEEMDAN-IMPA-GRU时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 ICEEMDAN-IMPA-GRU功率/风速预测 基于改进的自适应经验模态分解改进海洋捕食者算法门控循环单元时间序列预…

通过IP地址管理提升企业网络安全防御

在今天的数字时代&#xff0c;企业面临着越来越多的网络安全威胁。这些威胁可能来自各种来源&#xff0c;包括恶意软件、网络攻击和数据泄露。为了提高网络安全防御&#xff0c;企业需要采取一系列措施&#xff0c;其中IP地址管理是一个重要的方面 1. IP地址的基础知识 首先&a…

常见弯道输送机有哪些

提到弯道输送机您可能首先想到的就是弯道滚筒线&#xff0c;其实除了滚筒线之外&#xff0c;也有一些其他线体可以做弯道&#xff0c;下面就为您总结了4种常见的弯道输送机。 1、弯道皮带线&#xff1a;即线体转弯处设计成皮带输送机&#xff0c;这种形式的转弯设计可以实现不同…

【ElasticSearch】基于 Java 客户端 RestClient 实现对 ElasticSearch 索引库、文档的增删改查操作,以及文档的批量导入

文章目录 前言一、对 Java RestClient 的认识1.1 什么是 RestClient1.2 RestClient 核心类&#xff1a;RestHighLevelClient 二、使用 Java RestClient 操作索引库2.1 根据数据库表编写创建 ES 索引的 DSL 语句2.2 初始化 Java RestClient2.2.1 在 Spring Boot 项目中引入 Rest…

ChatGPT多模态升级,支持图片和语音,体验如何?

一、前言 9 月 25 日&#xff0c;ChatGPT 多模态增加了新的语音功能和图像功能。这些功能提供了一种新的、更直观的界面&#xff0c;允许我们与 ChatGPT 进行语音对话或展示我们正在谈论的内容。 ChatGPT 现在可以看、听、和说话了&#xff0c;而不单单是一个文本驱动的工具了。…

Android攻城狮学鸿蒙 -- 点击事件

具体参考&#xff1a;华为官网学习地址 1、点击事件&#xff0c;界面跳转 对于一个按钮设置点击事件&#xff0c;跳转页面。但是onclick中&#xff0c;如果pages前边加上“/”&#xff0c;就没法跳转。但是开发工具加上“/”才会给出提示。不知道是不是开发工具的bug。&#…

Charles:移动端抓包 / windows客户端 iOS手机 / 手机访问PC本地项目做调试

一、背景描述 1.1、本文需求&#xff1a;移动端进行抓包调试 1.2、理解Charles可以做什么 Charles是一款跨平台的网络代理软件&#xff0c;可以用于捕获和分析网络流量&#xff0c;对HTTP、HTTPS、HTTP/2等协议进行调试和监控。使用Charles可以帮助开发人员进行Web开发、调试…

解决:使用WileyNJDv5_Template模板时,无法生成pdf文件。

目录 问题&#xff1a; 解决办法&#xff1a; 检查过程&#xff1a; WileyNJDv5-Template模板链接&#xff1a;New Journal Design LaTeX template (wiley.com) 问题&#xff1a; 使用wileyNJDv5_Template模板时候&#xff0c;无法生成pdf文件。无论是使用texlivetexmaker还…