目的

为了对进程从产生到消亡的整个过程进行跟踪和描述,就需要定义各种进程的各种状态并制定相应的状态转换策略,以此来控制进程的运行。

粗略分类运行态:进程占用CPU,并在CPU上运行;

就绪态:进程已经具备运行条件,但是CPU还没有分配过来;

阻塞态:进程因等待某件事发生而暂时不能运行;

当然理论上上述三种状态之间转换分为六种情况;运行 → 就绪:这是有调度引起的,主要是进程占用CPU的时间已耗尽。

就绪 → 运行:当前运行的进程的时间片用完,调度就从就绪队列中选择合适的进程分配给CPU。

运行 → 阻塞:发生了I/O请求或等待某件事的发生。

阻塞 → 就绪:进程所等待的事件发生,就进入就绪队列。

以上4种情况可以相互正常转换,不是还有两种情况吗?阻塞 → 运行:即使给阻塞进程分配CPU,也无法执行,操作系统进行调度时不会从阻塞队列进行挑选,其调度的选择对象为就绪队列。

就绪 → 阻塞:因为就绪态根本就没有执行,何来进入阻塞态?

详细分类

现在知道了进程的三种基本状态,但是在操作系统具体现实中,设计者可以根据实际情况设置不同的状态,这样以来就出现了以下几种状态:可运行态:运行态和就绪态的合并,表示进程正在运行或准备运行,Linux 中使用 TASK_RUNNING 宏表示此状态。

浅度睡眠态:进程正在睡眠(被阻塞),等待资源到来是唤醒,也可以通过其他进程信号或时钟中断唤醒,进入运行队列。Linux 使用 TASK_INTERRUPTIBLE 宏表示此状态。

深度睡眠态:其和浅度睡眠基本类似,但有一点就是不可其他进程信号或时钟中断唤醒。Linux 使用TASK_UNINTERRUPTIBLE 宏表示此状态。

暂停状态:进程暂停执行接受某种处理。如正在接受调试的进程处于这种状态,Linux 使用 TASK_STOPPED 宏表示此状态。

僵死状态:进程已经结束但未释放PCB,Linux 使用 TASK_ZOMBIE 宏表示此状态。

我们可以来看下以上宏在内核中的定义:#define TASK_RUNNING            0

#define TASK_INTERRUPTIBLE      1

#define TASK_UNINTERRUPTIBLE    2

#define __TASK_STOPPED          4

#define __TASK_TRACED           8

/* in tsk->exit_state */进程的退出状态

#define EXIT_ZOMBIE             16

#define EXIT_DEAD               32

/* in tsk->state again */我理解为进程的唤醒状态

#define TASK_DEAD               64

#define TASK_WAKEKILL           128

#define TASK_WAKING             256

#define TASK_STATE_MAX          512

#define TASK_STATE_TO_CHAR_STR "RSDTtZXxKW"

LINUX进程间状态转换和内核调用图

(SAW:Game Over!)

linux 进程 status,Linux 进程状态详解相关推荐

  1. Linux进程管理工具 Supervisor详解

    介绍 Supervisor安装与配置(linux/unix进程管理工具) Supervisor(http://supervisord.org)是用Python开发的一个client/server服务, ...

  2. Linux进程查找命令pgrep详解

    pgrep是linux中常用的通过程序名字来查询进程的命令. 一般用来查找正在运行进程的PID信息. 常用选项: 默认只显示PID -l 同时显示进程名和PID -o 当匹配多个进程时,显示进程号最小 ...

  3. linux 进程状态 rl,Linux进程状态详解

    Linux进程状态详解 以下部分的代码示例,来自于Linux内核的0.11版本源码 在定义进程的数据结构task_struct时,有一个state字段是用来表示进程状态的,这里总结了下关于state字 ...

  4. LINUX经常使用的命令详解

    LINUX经常使用的命令详解 源地址:http://blog.itpub.net/29065182/viewspace-1189162/ 1.man 对你熟悉或不熟悉的命令提供帮助解释  eg:man ...

  5. linux下top命令参数详解

    linux下top命令参数详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. 内存信息.内容如下: ...

  6. linux proc目录作用,Linux下的proc目录详解

    Linux下的proc目录详解 [复制链接] 文章结构: 1.什么是proc目录 2. 初识proc目录 3. 从proc窥看系统详情 1.什么是proc目录 proc是Linux系统下一个很重要的目 ...

  7. Linux中的ps指令详解

    [时间]2018.12.16 [题目]Linux中的ps指令详解 转载地址:https://www.cnblogs.com/exe19/p/5511733.html 概述 要对进程进行监测和控制,首先 ...

  8. linux下测试ftp传输,linux下ftp命令使用详解---linux文件传输ftp命令

    linux下ftp命令使用详解---linux文件传输ftp命令 上一篇 / 下一篇  2010-12-18 09:15:35 / 个人分类:Linux ftp(file transfer proto ...

  9. Linux文件系统的目录结构详解(转)

    Linux文件系统的目录结构详解(转) 原文链接https://www.cnblogs.com/cyjaysun/p/4462325.html 一.前 言 文章对Linux下所有目录一一说明,对比较重 ...

最新文章

  1. 安徽池州贵池中学老师经典语录,我喷了
  2. 简单创建vsftp server
  3. 2019Java常见面试下
  4. 万字长文丨1分36秒,100亿,支付宝技术双11答卷:没有不可能
  5. Win7系统浏览器的兼容模式如何设置
  6. php算法和数据结构
  7. 解决miner.start() 返回null
  8. 利用 MPI 求素数个数
  9. python不属于字符串的是_【python cookbook】python过滤字符串中不属于指定集合的字符...
  10. 常见面试算法:k-近邻算法原理与python案例实现
  11. android edittext inputfilter,android – EditText和InputFilter会导致重复的文本
  12. 【蓝桥杯单片机组】两种外设访问方式:IO编程和MM编程
  13. Pytorch控制打印矩阵的格式
  14. 人工智能与就业系列调研 | 老板电器的新蝶变
  15. 袁老走好,谢谢您!我辈也当自强。
  16. Temporal Abstraction
  17. 无刷直流电机四象限matlab pudn,一种无刷直流电机四象限运行的PWM控制方法与流程...
  18. 机器学习笔记15——决策树(DT)、ID3算法、C4.5算法原理以及python实现案例
  19. HBase 性能与可用性在滴滴的探索与实践
  20. php网站 更改logo,zblog修改网站logo的方法

热门文章

  1. Java常用类之Calendar类和GregorianCalendar类
  2. AXI三种接口及DMA DDR XDMA介绍(应用于vivado中的ip调用)
  3. WordPress视频JustMedia主题模板源码
  4. 防掉线、防脱发的异步高性能Python Web框架
  5. PHYSIONET 心电数据库
  6. u盘插电脑后服务器未响应,绿叶u盘装系统win10出现dns服务器未响应怎么办
  7. 使用selenium爬取腾讯热点新闻
  8. Win10只有飞行模式,没有WLAN图标
  9. 打印机能连上却不能打印
  10. C++ reverse函数的用法