摘要:本文主要介绍进程资源和进程状态.进程资源由两部分组成:内核空间进程资源以及用户空间进程资源.进程状态,就绪/运行状态、等待状态(可以被中断打断)、等待状态(不可以被中断打断)、停止状态和僵死状态.

1.进程资源

进程是Linux系统下资源管理的基本单位,每个进程都有自己的独立的运行空间.为了更好的管理Linux所访问的资源,系统引入了进程控制(PCB)的概念,PCB结构体.
    进程资源由两部分组成:内核空间进程资源以及用户空间进程资源.
    内核空间进程资源:指的就是PCB相关信息.包括进程控制块本身、打开的文件表项、当前目录、当前终端信息、线程基本信息、可访问内存地址、PID、PPID、UID、EUID等,也就是说内核通过PCB可以访问到进程所有的资源.这些资源只能通过系统调用才能访问到.进程退出后,资源由另一进程来回收.
    用户空间进程资源:通过成员mm_struct映射的内存空间.实质就是进程的代码段、数据段、堆、栈、以及可以共享访问的库的内存空间.这些资源进程可以直接访问.在进程退出时主动释放.在进程运行时,可以通过文件 /proc/{pid}/maps来产看可以访问的地址空间.

2.进程状态

人生三大错觉之一:QQ、暴风影音、浏览器等可以一起运行,难道进程是并行运行的.非也非也.对于单CPU系统来说在某一时刻,只能有一个进程处于运行状态,占有CPU的使用权,其他进程都处于其他状态,等待系统资源,各进程根据调度算法在某些状态之间不停地的切换.但由于CPU处理效率较快,使用户感觉不到其中的变化.
    在Linux2.6内核中,用户级进程拥有以下几种状态:就绪/运行状态、等待状态(可以被中断打断)、等待状态(不可以被中断打断)、停止状态和僵死状态.
TASK_RUNNING:正在运行或处于就绪状态:就绪状态是指进程申请到了CPU以外的其他所有资源,正所谓:万事俱备,只欠东风.提醒:一般的操作系统教科书将正在CPU上执行的进程定义为RUNNING状态、而将可执行但是尚未被调度执行的进程定义为READY状态,这两种状态在Linux下统一为 TASK_RUNNING状态.
TASK_INTERRUPTIBLE:处于等待队伍中,等待资源有效时唤醒(比如等待键盘输入、socket连接、信号等等),但可以被中断唤醒.一般情况下,进程列表中的绝大多数进程都处于TASK_INTERRUPTIBLE状态.毕竟皇帝只有一个(单个CPU时),后宫佳丽几千;如果不是绝大多数进程都在睡眠,CPU又怎么响应得过来.
TASK_UNINTERRUPTIBLE:处于等待队伍中,等待资源有效时唤醒(比如等待键盘输入、socket连接、信号等等),但不可以被中断唤醒.
TASK_ZOMBIE:僵死状态,进程资源用户空间被释放,但内核中的进程PCB并没有释放,等待父进程回收.
TASK_STOPPED:进程被外部程序暂停(如收到SIGSTOP信号,进程会进入到TASK_STOPPED状态),当再次允许时继续执行(进程收到SIGCONT信号,进入TASK_RUNNING状态),因此处于这一状态的进程可以被唤醒.
用户级进程之间的状态切换关系如图2所示.

图2 用户进程状态切换图

笔者:个人能力有限,只是学习参考...读者若发现文中错误,敬请提出.

-- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------勿在浮沙筑高台,静下心来,慢慢地沉淀---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

进程资源和进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE相关推荐

  1. 【Linux 内核】进程管理 ( Linux 内核中的进程状态 | TASK_RUNNING | TASK_INTERRUPTIBLE | __TASK_STOPPED | EXIT_ZOMBIE )

    文章目录 一.Linux 内核中的进程状态 二.TASK_RUNNING 状态 三.TASK_RUNNING 状态 四.TASK_UNINTERRUPTIBLE 状态 五.__TASK_STOPPED ...

  2. (二)进程管理之进程状态及组织方式

    操作系统:linux 处理器:arm 内核版本:4.x 目录: 进程状态 R (TASK_RUNNING) S (TASK_INTERRUPTIBLE) D (TASK_UNINTERRUPTIBLE ...

  3. Linux 进程(一) 进程概念和进程状态(僵尸进程、孤儿进程、守护进程)

    进程的概念 进程状态 僵尸进程.孤儿进程.守护进程 进程的概念 程序:一系列有序的指令集合(就是我们写的代码) 进程:进程就是程序的一次执行,是系统进行资源分配和调度的独立单位. 程序是一个没有生命的 ...

  4. python僵尸进程和孤儿进程_进程3.0——进程状态与僵尸进程、孤儿进程

    进程3.0--进程状态与僵尸进程.孤儿进程 进程状态 一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程.进程状态即体现一个进程的生命状态 一般来说,进程有五种状态:创建状态:进程在创建时需 ...

  5. Linux进程资源监控命令

    目录 一.进程实时监控pidstat工具 1.pidstat 概述 2.pidstat 安装 3.实例讲解 二.Linux 系统管理命令(资源监控) 1.进程资源监测命令 一.进程实时监控pidsta ...

  6. 线程间到底共享了哪些进程资源

    进程和线程这两个话题是程序员绕不开的,操作系统提供的这两个抽象概念实在是太重要了. 关于进程和线程有一个极其经典的问题,那就是进程和线程的区别是什么?相信很多同学对答案似懂非懂. 记住了不一定真懂 有 ...

  7. 使用 shell 脚本对 Linux 系统和进程资源进行监控

    Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是 ...

  8. 第十七篇:获取 / 修改进程资源限制

    前言 每个进程都有其使用资源的一个限制,这些资源通常是在进程初始化时由进程 0 所建立的,然后由每个后续进程继承. 本文将介绍如何获取并修改进程的资源限制. 获取资源限制函数:getrlimit() ...

  9. 进程资源限制(rlimit)

    在Linux下的进程资源的限制(struct rlimit)详解 在Linux系统中,Resouce limit指在一个进程的执行过程中,它所能得到的资源的限制,比如进程的core file的最大值, ...

最新文章

  1. IntelliJ IDEA 2021.3.2 发布:告别不断建议安装xx插件的提示!
  2. 在 Windows 10 上安装 WSL | Microsoft Docs 转
  3. 计算机基础中怎么评价,浅谈职校计算机基础教学中的教学评价
  4. Maven-学习笔记03【基础-Maven标准目录结构和常用命令】
  5. Java自带的线程池ThreadPoolExecutor详细介绍说明和实例运用
  6. nginx作为tcp代理 虚拟主机配置 模板
  7. Android面试题总结加强版(二)
  8. Leetcode--1004. 最大连续1的个数Ⅲ
  9. Java基础学习总结(129)——Arrays.asList得到的List进行add和remove等操作出现异常解析
  10. java -cp 配置文件目录_java – 使用可执行JAR时指定Log4j2配置文件
  11. android相机代码权限,Android – 相机权限被拒绝而没有提示
  12. OPENCV运动追踪研究和PYTHON及JAVA实现
  13. 阿里云ACE北京同城会-景山活动
  14. 如何在Apple Watch上关闭“嘿Siri”
  15. The 2022 ICPC Asia Regionals Online Contest (I)
  16. android 输入法更换_详解安卓手机输入法和键盘切换方式的教程
  17. IE7,IE8与IE6兼容路上的痛苦
  18. torch.utils.data.WeightedRandomSampler样本不均衡情况下带权重随机采样
  19. E575: viminfo: Illegal starting char in line: hello=Hello\ \!\How\ are\ you\ \?
  20. java常见的5个异常_Java中常见的五种异常

热门文章

  1. 编程中的幂等性 —— HTTP幂等性
  2. 免费的xshell(正版)
  3. STM32实例-蜂鸣器实验
  4. 不会搭建Android知识框架,活该你成不了技术大牛!
  5. 该怎么用pyqt5来实现数据的增、删、改、查功能...
  6. Java实现Excel的导入以及导出,极其简单
  7. AWS Academy 学习平台建立 Learner Lab - 教师
  8. C语言计算大写字母的个数
  9. Ubuntu安装之,硬盘分区
  10. 生产者消费者模型的作用是什么