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

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进程状态解析之T、Z、X

             Linux进程状态:T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态.          向进程发送一个SIGSTOP信号,它就会因响应该信号而进入 ...

  2. [进程管理]Linux进程状态解析之R、S、D

    Linux是一个分时操作系统,能够在一个cpu上运行多个程序,每个被运行的程序实例对应一个或多个进程,这里介绍一下Linux进程状态. Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个 ...

  3. [转]使用 Shell 对进程资源进行监控

    原文:http://www.ibm.com/developerworks/cn/linux/l-cn-shell-monitoring/ 使用 Shell 对进程资源进行监控 检查进程是否存在 在 对 ...

  4. 二十一、Linux 进程与信号---进程查看和进程状态、进程调度和进程状态变化、进程标识

    21.1 进程查看和进程状态 21.1.1 ps 指令 ps 指令通常可以查看到进程的 ID.进程的用户 ID.进程状态和进程的 Command ps:查看当前用户启动的进程 ps -ef:详细查看后 ...

  5. 二十一、Linux 进程与信号---进程资源限制

    21.1 进程资源限制 在操作系统中,我们能够通过函数getrlimit().setrlimit()分别获得.设置每个进程能够创建的各种系统资源的限制使用量. 21.1.1 函数 #include & ...

  6. Linux进程资源占用分析

    [时间:2018-03] [状态:Open] [关键词:linux, 进程,proc,top] 0 引言 最近在分析安卓程序上的monkey测试日志时发现,需要了解下Linux进程资源占用情况及其查看 ...

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

    ShellLinux脚本 摘要:Shell语言对于接触Linux的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.本文我们以Bash做为实例总结了使用Shell对系统和进 ...

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

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

  9. Ubuntu打开系统监视器查看进程&资源等信息

    Ubuntu打开系统监视器查看进程&资源等信息 类似于Windows的任务管理器,Ubuntu也提供了系统监视器供用户管理进程及查看系统占用资源等 打开方式,终端输入如下命令: gnome-s ...

随机推荐

  1. Spring --- 异常处理机制

    1.定义全局异常处理器,为全局的异常,如出现将调用 error.JSP <!-- 定义异常处理器 --> <bean class="org.springframework. ...

  2. CentOS7配置阿里云yum源和EPEL源

    配置阿里云yum源(参考:http://mirrors.aliyun.com/help/centos) 1.备份 [root@bogon ~]# cd /etc/yum.repos.d/ [root@ ...

  3. flask的插件

    详情参考官方文档 组件一:flask-session 安装: pip  install  flask-session 使用方法:先导入   from flask_session import Sess ...

  4. MBProgressHUD自定义视图大小的修改

    MBProgressHUD 一款简单易用的弹窗,但是在使用中难免使用自定义view即customView,此时会发现HUD的弹窗大小和你image的大小是一样的无论你怎么修改frame也没有用,此时你 ...

  5. Unity中Instantiate物体失效问题

    才开始学Unity,开始总是这样用Instantiate函数: GameObject temp = (GameObject)Instantiate(bulletSource, transform.po ...

  6. scrapy xpath 从response中获取li,然后再获取li中img的src

    lis = response.xpath("//ul/li") for li in lis: src = li.xpath("img/@src") # 如果xp ...

  7. 学懂grid布局:这篇就够了(译)

    上周发过一篇关于flex布局的文章,但发完之后我感觉我并没有写很多自己对flex布局的理解,因为原链接的作者的轮子实在是太强了,这里借用知乎大佬牛岱的话来说,当人家已经有足够好的轮子,你就不要试图,甚 ...

  8. (转) 网络GET、POST方法

    在iOS中,常见的发送HTTP请求(GET和POST)的解决方案有 苹果原生(自带) NSURLConnection:用法简单,最古老最直接的一种方案 NSURLSession:iOS7新出的技术,功 ...

  9. Robot Framework与Web界面自动化测试:简单例子

    假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...

  10. URAL 1349 Farm

    Discription Here is a farm. Here is a farmer that counts how many animal live in his farm: a camels, ...