【linux】进程和线程的几种状态及状态切换

news2025/1/24 17:59:37

文章目录

  • 一、进程的状态
    • 1.1 进程的三种状态
    • 1.2 三种状态转换图
    • 1.3 三种状态之间的转换
    • 1.4 linux下的进程进程状态
  • 二、线程的状态
  • 三、总结

一、进程的状态

1.1 进程的三种状态

进程状态:一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程。进程状态即体现一个进程的生命状态。

一般来说,进程有三个状态,即就绪状态,运行状态,阻塞状态

运行态(Running):进程正在执行。
就绪态(等待态)(Waiting):进程在等待某个事件的发生,例如输入输出操作、网络请求等。
阻塞态(Blocked):进程被挂起,等待某些资源的释放或者信号的到达。

1.2 三种状态转换图

在这里插入图片描述

1.3 三种状态之间的转换

理论上上述三种状态之间转换分为六种情况;

运行——>就绪:

  1. 主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;
  2. 在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态。

就绪——>运行:

运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU

运行——>阻塞:

正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求

阻塞——>就绪:

进程所等待的事件已经发生,就进入就绪队列

以下两种状态是不可能发生的:

阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取

就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态。

在一些系统中,又增加了一些新状态,如挂起状态,可运行状态,深度睡眠状态,浅度睡眠状态,暂停状态,僵死状态。

1.4 linux下的进程进程状态

linux中的进程一般有以下状态:

R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列
里。
S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。
D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的
进程通常会等待IO的结束。
T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态

具体的讲解在【linux】进程概念详述(五、进程状态)。
这里把它们之间的转换图列出来:
在这里插入图片描述

二、线程的状态

线程通常有五种:

新建状态(New): 新创建了一个线程对象,该线程的生命周期开始。
就绪状态(Runnable): 线程对象创建后,其它线程调用了该对象的start方法,该状态的线程会位于可运行的线程池中,变得可运行,等待cpu的使用权。
运行状态(Running): 就绪状态的线程获取到了cpu的时间片,执行程序代码。
阻塞状态(Blocked): 阻塞状态是线程因为某种原因放弃cpu的使用权,暂停或停止运行,直到线程进入就绪状态,才有机会获得cpu的青睐从而转入运行状态。
死亡状态(Dead): 线程执行完了或者因为异常而退出的run方法,该线程生命周期结束。

这里的阻塞状态又分为三种:

等待阻塞: 运行的线程执行wait方法,则该线程会释放占用的的所有资源,jvm会把该线程放入 “等待池” 中,进入这个状态后是不能被自动唤醒的,需要调用notify/notifyAll 方法才能被唤醒。
同步阻塞: 运行的线程在获取对象的同步锁时,若该同步锁被其它线程占用,则jvm会把该线程放入 “锁池” 中。
其它阻塞: 运行的线程执行sleep/join方法、或者发出了I/O请求时,jvm会把该线程置为阻塞状态。当sleep方法等待超时、join方法等待线程终止或者超时、I/O处理完毕时,线程将重新转入就绪状态。

三、总结

线程的状态可能会受到操作系统调度策略的影响,因此不同的操作系统可能会有不同的状态定义。此外,在多线程编程中,程序员也可以通过锁、条件变量等机制来控制线程的状态转换。



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

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

相关文章

安装spacy+zh_core_web_sm避坑指南

目录 一、spacy简介 二、安装spacy 三、安装zh_core_web_sm 四、安装en_core_web_sm 五、效果测试 5.1 英文测试 5.2 中文测试 一、spacy简介 spacy是Python自然语言处理(NLP)软件包,可以对自然语言文本做词性分析、命名实体识别、依赖…

Java数组的四种拷贝方式

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

ERTEC200P-2 PROFINET设备完全开发手册(3-2)

周期数据分为两大类,输出数据OutputData和输入数据InputData,输出数据是PLC发送给设备的;输入数据是设备发送给PLC。如果采用标准接口(SI),读取输出数据和写入输入数据都是一次初始化数据读写调用和一次/多…

【ChatGPT】多国“围堵”,万人抵制,AI发展的红线到底在哪?

个人主页:【😊个人主页】 文章目录前言Chatgpt💻💻💻多国拟发ChatGPT禁令🈲🈲🈲开端发展高潮联名抵制自我辩解🎛️🎛️🎛️名家争言比尔盖茨&…

TiDB进阶篇-TiKV架构

简介 简要的介绍下TiKV的架构。 底层存储RocksDB RocksDB的写操作 在写入WAL的时候为了防止操作系统写入的时候有缓存,要设置操作系统的参数sync_logtrue,也就是说只要有数据就执行刷写到磁盘,就不会存储到操作系统的缓存了。MemTable的数据…

【Python】无限逼近求积分

✨博文作者 wangzirui32 💖 喜欢的可以 点赞 收藏 关注哦~~ 👉本文首发于CSDN,未经许可禁止转载 Hello,大家好,我是wangzirui32,今天我们来学习如何用Python无限逼近求积分,开始学习吧&#xff…

krita源码提供了Tarball 和KDE Repository两套源码的区别

krita系列文章目录 文章目录krita系列文章目录前言一、Tarball 和KDE Repository区别是什么?二、使用步骤前言 krita官方主页 krita官方下载界面 krita源码提供了Tarball 和KDE Repository两套源码,我一下就懵圈了,不知道两者的区别 一…

第二章 自然语言处理与单词的分布式表示

目录2.1 自然语言处理(Natural Language Processing,NLP)2.2 同义词词典2.2.1 WordNet2.2.2 同义词词典的问题2.3 基于计数的方法2.3.1 基于 Python的语料库的预处理2.3.2 单词的分布式表示2.3.3 分布式假设2.3.4 共现矩阵2.3.5 向量间的相似…

有哪些中西合璧的建筑设计?

所谓中西合璧,中即中华文化,体系繁多,源远流长,浩如烟海,是世界三大文化体系之一,在历史上曾是东亚文化的中心,一度影响欧洲;西即西方文化,西方物质文明和精神文明&#…

【JSP学习笔记】1.JSP 教程、简介及开发环境搭建

前言 本章介绍JSP的教程、简介及开发环境搭建。 JSP 教程 JSP 与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。 JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户…

2022国赛30:windows脚本题解析

大赛试题内容: ( 九) ) 脚本 【任务描述】 为了减少重复性任务的工作量,节省人力和时间,请采用脚本,实现快速批量的操作。 1.在 windows4 上编写 C:\CreateFile.ps1 的 powershell 脚本,创建20 个文件 C:\test\File00.txt 至 C:\test\File19.txt,如果文件存在,则首先删除…

Servlet初始化参数设置\获取,全局初始化参数的设置、获取

之前在学习SpringMVC、SpringSecurity时,会用到Filter,需要对Filter进行参数配置,而Filter本质上也是一个Servlet,然后对Servlet设置初始化参数已经忘记了,所以打算重新回顾并整理Servlet这一部分的内容(虽…

[Netty源码] 编码和解码相关问题 (十二)

文章目录1.编码和解码的介绍2.相关继承3.解码器分析3.1 ByteToMessageDecoder基类3.2 FixedLengthFrameDecoder3.3 LineBasedFrameDecoder3.4 DelimiterBasedFrameDecoder3.5 LengthFieldBasedFrameDecoder4.编码器分析4.1 解码过程分析4.2 writeAndFlush方法分析4.3 MessageTo…

2007-2020年国际产权指数InternationalPropertyRightsIndex(IPRI)IPRI

2007-2020年国际产权指数InternationalPropertyRightsIndex(IPRI)IPRI 1、来源:国际产权联合会 International Poverty Right Alliance 2、时间:2007-2020 3、范围:全球 4、指标说明: country、region、score、annual change…

提高软件测试效率的6大注意事项

1、测试策略非常重要 测试策略的基础是风险评估,我们需要通过失效概率和失效影响两个维度,对风险进行高、中、低的区分和可能性的判断。如CoCode开发云能够根据风险影响等级,自动计算出风险系数,并对风险进行优先级划分。而系数超…

项目管理:我们每个人都是管理者

项目管理的技能在生活中时时能用到、处处可锻炼。只要有心,项目成员一样可以学习和实践项目管理知识,也可以说,我们每个人都是管理者。 1、管理是职能而不是职位 有的人认为项目管理只是管理者应该学的,其实不是这样的&#xf…

卷积神经网络底层原理

1.卷积神经网络底层原理 声明:以下为《大话计算机》作者冬瓜哥课程视频截图,仅供学习 1.1卷积 一张图经过一种卷积核(核函数)滑动窗口进行卷积运算后得到一张特征图,这只是这种卷积核视角下看到的特征。所以我们需要多…

一起学 WebGL:图形变形以及矩阵变换

之前绘制了三角形,我们现在给它做一个变形操作。 对一个三角形进行变形,其实就是重新这个三角形的三个顶点的位置,计算完后再绘制出来,相比原来就发生了变形。 变形常见的有位移、选择、缩放。位移,其实就是给每个顶…

中国版ChatGPT即将来袭-国内版ChatGPT入口

必应chatGPT入口 目前并不存在“必应ChatGPT”这个概念。必应(Bing)是Microsoft公司推出的一款搜索引擎,而ChatGPT是OpenAI开发的自然语言处理技术,它们是两个不同的产品品牌。 不过,Microsoft也在自然语言处理领域里…

Microsoft 365管理和报告工具

在管理 Microsoft 365 设置的过程中,本机Microsoft 365 功能可能无法满足你的需求。M365 Manager Plus 具有复杂的功能,使 Microsoft 365 管理毫不费力。它提供基于功能的管理,因此你可以单独管理 Microsoft 365 组件。 使用 M365 Manager P…