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

这篇具有很好参考价值的文章主要介绍了【linux】进程和线程的几种状态及状态切换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、进程的状态

1.1 进程的三种状态

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

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

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

1.2 三种状态转换图

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

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】进程概念详述(五、进程状态)。
这里把它们之间的转换图列出来:
【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处理完毕时,线程将重新转入就绪状态。

三、总结

线程的状态可能会受到操作系统调度策略的影响,因此不同的操作系统可能会有不同的状态定义。此外,在多线程编程中,程序员也可以通过锁、条件变量等机制来控制线程的状态转换。文章来源地址https://www.toymoban.com/news/detail-413875.html



到了这里,关于【linux】进程和线程的几种状态及状态切换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】进程状态|优先级|进程切换|环境变量

    💕 运行队列: 进程是如何在CPU上运行的:CPU在内核上维护了一个运行队列,进行进程的管理。让进程进入队列,本质就是将该进程的task_struct 结构体对象放入运行队列之中。这个队列在内存中,由操作系统自己维护。 💕 运行状态: 运行状态 进程PCB在运行队列里就是运行

    2024年02月02日
    浏览(43)
  • 【Linux】关于进程的理解、状态、优先级和进程切换

    进程不同的状态本质都是在满足不同的运行场景的 1.运行队列 运行队列 进程如何在CPU上运行的:CPU在内核上维护了一个运行队列,进行进程的管理。让进程入队列,本质就是将该进程的task_struct 结构体对象放入运行队列之中。 2.运行状态 运行状态 进程PCB在运行队列里就是运

    2024年02月04日
    浏览(45)
  • 【Linux】Linux进程的理解 --- 冯诺依曼体系、进程描述符、状态、优先级、切换…

    如果不改变自己,就别把跨年搞的和分水岭一样,记住你今年是什么吊样,明年就还会是什么吊样!!! 1.冯诺依曼体系结构中的存储器指的是内存,带电存储,具有掉电易失的特点。 2.CPU中含有能够解释计算机指令的指令集,指令集又可分为精简指令集和复杂指令集,这也

    2024年01月25日
    浏览(52)
  • 手机切换ip地址的几种方法详解

    在某些情况下,我们可能需要切换手机的IP地址来实现一些特定的需求,如解决某些应用程序的限制、绕过IP封禁等。本文将为大家分享几种切换手机IP地址的方法,让您能够轻松应对各种需求。 一、使用动态服务器 使用动态服务器是一种常见的切换手机IP地址的方法。动态服

    2024年02月07日
    浏览(50)
  • css 鼠标点击的几种状态

    转载自

    2024年02月11日
    浏览(28)
  • python中进程的几种创建方式

    在新创建的子进程中,会把父进程的所有信息复制一份,它们之间的数据互不影响。 该方式只能用于Unix/Linux操作系统中,在windows不能用。 multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结束: join()方法表示主进程等待子

    2024年02月11日
    浏览(64)
  • 创建线程的几种方式

    线程和进程的区别: 进程是操作系统进行资源分配的最小单元。 线程是操作系统进行任务分配的最小单元,线程隶属于进程。 如何开启线程? 1、继承Thread类,重写run方法。 2、实现Runnable接口,实现run方法。 3、实现Callable接口,实现call方法。通过FutureTask创建一个线程,获

    2024年02月03日
    浏览(58)
  • Python进程间通信常用的几种方式

    1. 队列(Queue) 多个进程使用队列进行数据交换。进程通过队列发送和接收对象。 队列是一个可以存储任意类型数据的数据结构,而且支持多线程操作,因此在Python的多进程编程中,可以利用队列来实现进程间通信。 下面是一个简单的利用队列实现进程间通信的示例代码: 在

    2024年03月26日
    浏览(65)
  • JavaScript中 判断网络状态的几种方法

    1. 使用 Navigator onLine 属性 Navigator onLine 属性判断浏览器是否在线,在线返回 true,离线返回 false; Navigator onLine 是只读属性,所有主流浏览器都支持 onLine 属性; 2. 使用 ononline、onoffline 事件 这两个方法属于 “侦听器”,在网络连接 / 断开的瞬间会触发(当网络从离线变为在

    2024年01月24日
    浏览(49)
  • Java 终止线程的几种方式

    所谓正常运行结束,就是程序正常运行结束,线程自动结束。 一般run()方法执行完,线程就会正常结束,然而,常常有些线程是伺服线程。他们需要长时间的运行,只有在外部某些条件满足的情况下,才能关闭这些线程。使用一个变量来控制循环,例如:最直接的方法就是设

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包