进程状态究竟是什么?在Linux操作系统中具体存在哪些进程状态?

news2024/9/21 18:48:11

进程状态究竟是什么?在Linux操作系统中具体存在哪些进程状态?

  • 前言
  • 一、操作系统中的进程状态
    • 1.1 运行状态
    • 1.2 阻塞状态和唤醒
    • 1.3 挂起状态
  • 二、Linux操作系统中具体进程状态
    • Linux中的进程状态种类
    • 2.1 R运行状态(running)
    • 2.2 前台进程、后台进程
    • 2.3 S睡眠状态 、D磁盘休眠状态
    • 2.4 Z 僵尸状态
    • 2.5 T停止状态
    • 2.6 X死亡状态

前言

 进程状态就是PCB中的一个字段(通俗来讲,就是PCB中的一个变量),进程状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。
 进程状态在操作系统中分为为:新建状态、就绪状态、阻塞状态、挂起状态以及结束状态。但在每一款具体的操作系统中,进程状态多存在差异,并非完全对应。
 为此本篇博客将分别介绍理论进程状态、在Linux操作系统中的进程状态有哪些!

一、操作系统中的进程状态

 在操作系统层面上,进程状态分为以下5类:新建状态、就绪状态、运行(执行)状态、阻塞状态、以及终止状态(还有挂起状态)
 在操作系统中存在运行队列、等待设备的等待队列等等队列。而进程的状态的本质就是更改进程中pcb -> status指向的整型变量、并将进程的pcb链入不同的队列中

在这里插入图片描述

1.1 运行状态

 在计算机中,为了更好的进行进程调度,操作系统会为每一个CPU维护一个运行队列。所有将来需要被CPU调度的进程都会被链入该运行队列中。对于早期的计算机而言,只有进程被加载到CPU中时,进程状态才被称为运行状态。但在现在的计算机中,只有进程在CPU的运行队列中,此时进程的状态就被称为运行状态。(现代计算机中创建状态、就绪状态、执行状态以及区分不大了)
在这里插入图片描述

1.2 阻塞状态和唤醒

 当CPU在运行进程时,有些程序需要访问其他资源(比如:网卡、显卡、键盘等等)。以键盘为例,当程序中存在scanfcin等操作时,程序需要从键盘上读取我们输入的数据。如果我们此时不输入任何东西,此时表明设备中的数据没有就绪(更直接的说,当前进程要访问的数据没有就绪)。此时操作系统会将该进程的PCB从运行队列中移到该设备队列的等待队列中,此时进程的状态称为阻塞状态。
 当设备中的数据就绪后,OS会将等待队列中的进程重新移会运行队列中,该过程被称为进程唤醒!!

在这里插入图片描述

1.3 挂起状态

 当一个进程被堵塞时,该进程无法被调度。如果此时操作系统的资源以及严重不足时,操作系统会将该进程的代码和数据都转移到磁盘的Swap分区。当进程被转移到磁盘中时,此时进程的状态称为挂起状态!当进程杯调度时,操作系统会将对应的代码和数据重新加载到内存中。

  1. Swap分区的大小普遍为内存的1~2倍左右。不能设置过大,否则当系统内存不足时,OS会过度依赖Swap分区,导致大量内存和磁盘间的IO操作,大大降低计算机的运行速度!!
  2. 当内存不足时,所有进程状态为阻塞状态的进程都有可能会置换到磁盘Swap分区。

二、Linux操作系统中具体进程状态

Linux中的进程状态种类

下面时Linux内核中进程状态的描述:

/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"T (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};

下面我们来一一介绍每种进程状态究竟是什么!

2.1 R运行状态(running)

R运行状态并不意味着进程一定在CPU中运行,进程只需在CPU中或运行队列中即可。
 下面我们在code.c源文件中写入一个死循环,然后通过Makefile/make编译后,通过脚本监视该进程看看进程的状态变化!

【code,c源文件】:

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

【进程监控脚本】:博主源文件编译形成的目标文件为mybin,各位可将脚本中的mybin替换成各自的目标二进制文件。

while :; do ps axj | head -1 && ps axj | grep mybin | grep -v "grep"; sleep 1; echo "################################################"; done

【动画展示】:
请添加图片描述
在动画展示中,我们发现进程运行时,进程状态尽然是S+(其实还有个别情况中会出现R+,博主试不出就只剪了一小段)。至于为啥绝大部分进程状态为S+,原因在于S状态是一种阻塞状态,在源文件中存在向外设输出信息的过程,此时外设不一定装备好了,因此进程切换到堵塞。(+表示为前台进程,后续介绍)

如果我们将源文件code.c中向外设输出的语句去掉即可看到进程状态为R+
【code.c源文件】:

 #include <stdio.h>
 #include <unistd.h>
 
 int main()
 {
     while(1)
     {}
     retunrn 0;
 }

【动画展示】:
请添加图片描述

2.2 前台进程、后台进程

 在2.1中我们在动画展示中发现进程状态后面带+,该符号表示当前进程为前台进程,前台进程在程序运行时无法执行其他指令,并且可以通过ctrl c来结束进程
 在运行文件后&,此时进程为后台进程。后台进程可以在程序运行时执行其他指令,但操作系统无法将该进程杀掉(即无法通过ctrl c来结束进程)。只能通过kill -9 进程PID来杀掉该进程!

【前台进程动画展示】:
请添加图片描述
【后台进程动画展示】:
请添加图片描述
 实际上,编译器调式就是18) SIGCONT19) SIGSTOP两者信号间相互转化来控制的。

2.3 S睡眠状态 、D磁盘休眠状态

 睡眠状态,是意味着进程在等待事件完成。S时一种浅度睡眠,可以被终止。(即上面动画展示中通过Ctrl c终止进程)
 磁盘休眠状态,有时候也叫不可中断睡眠状态,是一种深度睡眠。该状态主要体现在操作系统向磁盘中写入重要关键数据时,防止数据丢失,在这个状态的进程通常会等待IO的结束。(如果此时操作系统内存不足,并且当前进程正在向磁盘写入数据;此时该进程的状态改为堵塞状态,操作系统可能会将该进程直接杀掉,找出数据丢失)

2.4 Z 僵尸状态

2.5 T停止状态

 在Linux中存在很多进程信号,可以通过kill -l指令查看!

在这里插入图片描述

 T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程;这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行

tips:前台进程被stopped停止后会变成后台进程!!

【动画展示】:
请添加图片描述

2.6 X死亡状态

 X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

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

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

相关文章

#GIT|Git Flow#Gitflow工作流程

Gitflow是一种使用功能分支和多个主分支的Git分支模型&#xff0c;它适用于有预定发布周期的项目&#xff0c;也适用于DevOps最佳实践中的持续交付。这个工作流程不会添加任何新的概念或命令&#xff0c;而是为不同的分支分配了非常具体的角色&#xff0c;并定义了它们应该如何…

什么是正向代理和反向代理?

从字面意思上看&#xff0c;代理就是代替处理的意思&#xff0c;一个对象有能力代替另一个对象处理某一件事。 代理&#xff0c;这个词在我们的日常生活中也不陌生&#xff0c;比如在购物、旅游等场景中&#xff0c;我们经常会委托别人代替我们完成某些任务。在技术领域&#…

官宣子品牌艾荷,坚定数字化赋能,鸿雁2024新春发布会助推40多年央企品牌焕新升级

3月25日&#xff0c;一场以“春江水暖雁先飞”为主题的2024鸿雁电器智能物联战略及新品发布会在杭州盛大召开。鸿雁电器总裁王米成、副总裁吴明、副总裁夏晓衍、市场部总经理梁彩雷、五金水暖渠道部总经理刘亮、灯饰与智能家居渠道部总经理王育炳等公司领导出席&#xff0c;以及…

SpringMvc之映射器HandlerMapping

简介 在springmvc的处理流程中&#xff0c;第一步就是查询请求对应的映射器&#xff0c;然后组装成处理器链处理请求&#xff0c;本文意在梳理该过程 重要实现 HandlerMapping是一个接口&#xff0c;该接口用于通过HttpServletRequest寻找对应的处理器&#xff0c;接口介绍如下…

super的使用细节

1、super的使用细节 2、super和this的比较

Git_.gitignore文件相关知识

.gitignore 作用&#xff1a;指明不对哪些文件进行版本控制。 应当忽略哪些文件&#xff1f; 系统或软件自动生成的文件编译时产生的中间文件和结果文件运行时产生的日志文件&#xff0c;临时文件和缓存文件涉及身份&#xff0c;密码&#xff0c;口令&#xff0c;秘钥等敏感…

Spring Boot | SpringBoo“开发入门“

目录 : 1.SpringBoot的“介绍”SpringBoot”概述” &#xff1a;SpringBoot”简介“SpringBoot的“优点” 2. SpringBoot入门程序环境准备使用 “Maven”方式构建SpringBoot 项目使用“Spring Initializr”方式构建Spring Boot 项目 3. “单元测试” 和“热部署”单元测试热部署…

银行单元化架构体系介绍

1.背景 自2018年以来&#xff0c;受“华为、中兴事件”影响&#xff0c;我国科技受制于人的现状对国家稳定和经济发展都提出了严峻考验。目前我国IT架构体系严重依赖国外产品&#xff0c;金融行业尤其明显。大部分传统银行的关键账务系统都架设在IBM的大型机、小型机之上&…

EPSON的实时时钟模块RX8010SJ丰富的定时功能及超低功耗特性

温控器是用于控制温度的设备&#xff0c;目前市面上的温控器用于控制地暖空调、热水器、中央新风系统等设备。随着智能家居理念深入人心&#xff0c;人们也期望温控器不仅能控得"准”&#xff0c;还能控得“智能”。为了实现智能控制&#xff0c;温控器一般需要实时时钟模…

【Vue 页面+flex布局 】一行内显示4个元素,超出4个换行,每一行的最后一个去掉marginRight属性

问题 一行展示4个&#xff0c;每个元素之间的margin-right 为20px&#xff0c;导致最右侧没有和上面的输入框对齐 实现效果 修改 正确思路&#xff1a; 一行展示4个&#xff0c;前三个元素之间的margin-right 为20px&#xff0c;最后一个元素margin-right 设置为 0px 代码 …

【198】Java8编写Main程序场景下引入log4j2的例子

场景 有些情况下&#xff0c;需要程序员编写非服务器程序&#xff0c;或者编写不使用 Springboot 框架的程序。这个时候如果需要生成日志&#xff0c;就要采用本文的方法来引入 log4j2 。本文的例子还涉及了在程序打包的时候&#xff0c;如何处理依赖jar包的问题。 例子 下面…

钢结构行业的MES需求特点解析

导 读 ( 文/ 973 ) 钢结构行业作为重要的建筑材料供应商和施工服务提供商&#xff0c;对于生产过程的高效管理和质量控制有着严格要求。其中制造执行系统&#xff08;MES&#xff09;在钢结构行业中扮演着关键的角色。本文将探讨钢结构行业中MES的需求特点&#xff0c;包括…

sdrangel下载与部署for windows

下载 https://github.com/f4exb/sdrangel 在其目录下新建build文件 部署 打开cmake软件,修改如下 点击下面Configure,选择对应vs版本 点击finish,按照提示报错信息配置即可 ARCH_OPT=SSE4_2 DEBUG_OUTPUT

数据库事务补充和存储引擎

一、数据库事物补充 1.1 事务之间的相互影响 1.2 Mysql事务隔离级别 1.2.1 read uncommitted 1.2.2 read committed 1.2.3 repeatable read&#xff08;重读读取&#xff09; 1.2.4 serializable&#xff08;串行化&#xff09; 1.3 事务的作用范围 1.3.1 查询全局事务…

智慧医疗包括哪些方面?智慧医疗发展前景如何?

近年来&#xff0c;随着云计算、物联网&#xff08;internet of things&#xff0c;IOT&#xff09;、移动互联网、大数据、人工智能&#xff08;artificial intelligence&#xff0c;AI&#xff09;、5G网络、区块链等新一代信息技术的逐步成熟和广泛应用&#xff0c;信息化已…

设计模式之工厂方法模式精讲

工厂方法模式又叫虚拟构造函数&#xff08;Virtual Constructor&#xff09;模式或者多态性工厂&#xff08;Polymorphic Factory&#xff09;模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口&#xff0c;将实际创建性工作推迟到子类中。 工厂模式可以分为简单工厂…

【哈希专题】【蓝桥杯备考训练】:星空之夜、模拟散列表、字符串哈希、四平方和、扫雷【已更新完成】

目录 1、星空之夜&#xff08;usaco training 5.1&#xff09; 2、模拟散列表&#xff08;模板&#xff09; 3、字符串哈希&#xff08;模板&#xff09; 4、四平方和&#xff08;第七届蓝桥杯省赛C A组/B组 & JAVA B组/C组&#xff09; 5、扫雷&#xff08;Google Ki…

【学习】软件测试行业未来的发展趋势预测

近年来&#xff0c;随着中国数字经济的蓬勃发展&#xff0c;软件测试行业也迎来了新的春天。从早期的手工测试到自动化测试&#xff0c;再到持续集成和持续交付&#xff0c;中国的软件测试行业经历了快速的发展和变革。各行各业均对软件测试提出了更高的要求&#xff0c;尤其在…

基于java+springboot+vue实现的大学生二手物品交易商城(文末源码+Lw+ppt)23-329

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这…

暴雨讲堂:AI时代第五代英特尔CPU能做什么?

如果把科技圈比作娱乐圈&#xff0c;那么这两年的顶流一定是AI。2023年&#xff0c;世人见证了ChatGPT在全球范围内的大火&#xff0c;以生成式AI为代表的新一轮人工智能应用问世&#xff0c;改变了人工智能&#xff08;AI&#xff09;技术与应用的发展轨迹&#xff0c;并开始在…