From : http://www.linfo.org/process_state.html

进程状态是指在进程描述符中状态位的值。

进程,也可被称为任务,是指一个程序运行的实例。

一个进程描述符是一个task_struct类型的数据结构,这个数据结构内保存了一个进程的所有相关信息。其中的进程状态区域描述了当前正在发生什么。

数据结构是一种结构化存储以期更有效利用数据的方法。task_struct是一种被设计用来为内核提供进程所有信息的数据结构,在32位机器上它大概有1.7KB大小。

进程描述符中进程状态区域描述了当前该进程在发生些什么。这个区域的值是下列5个标志之一:

TASK_RUNNING:这个进程是可运行的——要么它正在运行,要么在runqueue中等待运行。对于用户空间 (指内存 上用户进程运行的空间) 正在运行的进程来说,它只可能是可运行的。对于 内核空间 (内存上内核运行并提供服务的空间)正在运行的进程来说,可运行状态也是可能的。

可运行进程 (译者注:这篇文章我已经翻译了)就是指该进程的进程状态为TASK_RUNNING。

一个runqueue(运行队列)是 scheduler(调度器)里面的基本数据结构,它保存了可运行进程的列表,这些列表中的进程随后会被CPU执行。scheduler (调度器)也被称为process scheduler (进程调度器),是内核的一部分,它会为不同的可运行进程分配CPU时间。



TASK_INTERRUPTIBLE: 这个进程正在睡眠(例如被锁了),它在等待某个条件的满足或者某个信号的到达。当条件满足或者某一个信号来的时候,内核就会把这个进程的状态位设置为TASK_RUNNING。

信号是一种在进程中或者进程组中传递的短小消息,每一个信号对应一个整数(译者注:1~30左右)。 用户模式 下的进程可以通过它进行交互,内核亦可以通过信号告知进程发生的事件(用户模式下的进程是被禁止访问内存中内核和其他程序的空间的)。除了通知的功能,信号还可以强制进程执行它内部的信号处理函数。



TASK_UNINTERRUPTIBLE: 在进程接收到信号时,不会被唤醒变成可运行的。除了这一点,该标志和TASK_INTERRUPTIBLE其他部分完全一样。这个状态通常用于进程必须不间断等待或者事件发生的频率很快。该标志并没有TASK_INTERRUPTIBLE常用,毕竟它不能对信号做出反应。



TASK_ZOMBIE: 该进程已经终止了,但是他的父进程(fork出该进程的进程)并没有调用wait4() (译者注:wait3, wait4 - wait for process to change state, BSD style)。进程结束后,进程要保证它的父进程还可以获得它的进程描述符以便知晓它为什么终止和终止的状态。如果父进程调用wait4() ,子进程在内存中的进程描述符就会被回收。

系统调用是通过软件中断实现的,活动进程通过这种方法要求内核提供相关服务。wait4()系统调用告诉操作系统挂起当前进程知道某一个子进程终止。

中断是指向内核发送一个信号,告知某一个事件的发生,这通常会导致CPU内的指令执行顺序发生改变。软件中断,或者称为异常,是产自于软件的中断,通常指用户模式下的程序。

(译者注:关于僵尸进程、孤儿进程的详细信息可以参见我的另一篇文章Linux 进程与信号的概念和操作 linux process and signals中的僵尸进程部分)



TASK_STOPPED: 表示该进程已经停止执行,并且不具有再次执行的条件。通常情况下,(译者注:进程没有对一些可以捕捉的信号进行捕捉或者忽略),当进程接收到SIGSTOP, SIGTSTP, SIGTTIN or SIGTTOU这些默认动作是停止进程的信号时,进程就会进入该状态;或者,当进程正在被debugged的时候接受到任何信号,也会立即进入该状态。

Linux 进程状态 概念 Process State Definition的更多相关文章

  1. Linux 进程状态标识 Process State Definition

    From : http://www.linfo.org/process_state.html 译者:李秋豪 进程状态标识是指在进程描述符中状态位的值. 进程,也可被称为任务,是指一个程序运行的实例. ...

  2. Linux进程状态 ( Linux Process State Codes)

    进程状态代码及说明: STATE代码 说明 D 不可中断的睡眠. 通常是处于I/O之中. R 运行中/可运行. 正处于运行队列中. S 可中断的睡眠. 等待某事件发生. T 已停止. 可能是因为she ...

  3. Linux 进程状态【转】

    转自:http://www.cnblogs.com/itech/p/3208261.html 来自: http://blog.csdn.net/tianlesoftware/article/detai ...

  4. linux进程状态详解(转)

    Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态.  在下文将对进程的 R.S.D.T.Z.X 六种状态做个说明. PROCESS ...

  5. Linux进程状态解析

    引言 Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态.  在下文将对进程的R.S.D.T.Z.X 六种状态做个说明. PROCE ...

  6. ORA-00020: No more process state objects available故障一例

    今天公司一大早收到通知,昨天数据库数据未生成.当时查看跑批的日志,发现平常只需运行半个小时的过程,今天整整运行了7个小时(明显存在问题),导致后续数据正常时间读取失败.为了了解起因,查看了oracle ...

  7. Linux进程状态查询

    进程状态详细说明 Linux进程状态详细解析 ps 的参数说明 ps 提供了很多的选项参数,常用的有以下几个:        l 长格式输出:        u 按用户名和启动时间的顺序来显示进程:  ...

  8. [进程管理]Linux进程状态解析之T、Z、X

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

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

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

随机推荐

  1. 201521123008《Java程序设计》第六周实验总结

    1.本周学习总结 2.书面作业 1.clone方法 1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 因为被protected修饰 ...

  2. 201521123034《Java程序设计》第十周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...

  3. linux 下怎样查找一个文件夹在哪个目录下?

    如果只显示所在目录的路径: find 目录 -type d -name "查询目录名" -printf "%h\n" 如果同时显示目录名称和所在目录的路径: f ...

  4. centOS 6启动流程

      centOS6启动流程 centOS6启动流程 linux内核组成 centos6启动大致流程 1.post加电自检 2.Boot Sequence 3.MBR引导 4.Grub启动 制作init ...

  5. Selenium+Python自动化测试实战(2)元素定位

    1.Selenium2 的原理 第一篇分享简单介绍了基于Python开发的Selenium2的环境配置,这篇主要讲一下基本用法.首先讲一下Selenium2的基本原理.基本上知道了这个东西是怎么回事, ...

  6. Hibernate第十一篇【配置C3P0数据库连接池、线程Session】

    Hibernate连接池 Hibernate自带了连接池,但是呢,该连接池比较简单..而Hibernate又对C3P0这个连接池支持-因此我们来更换Hibernate连接池为C3P0 查看Hibern ...

  7. Spring02-AOP

    1,动态代理,指的是通过一个代理对象创建需要的业务对象,然后在这个代理对象中统一进行各种操作. 步骤: 1)写一个类实现InvocationHandler接口: 2)创建要代理的对象 2,创建一个简单 ...

  8. Qt Creator编译运行成功,但是显示系统找不到指定的文件(比如urlmon.dll动态链接库)

    问题: 以前自己写的一个QT界面程序,在win 7 的32位系统上运行没有出现任何问题,但是重装系统之后,同样的程序放到win10 的64位系统下运行会出现警告:onecoreuap\inetcore ...

  9. 将Editplus添加到右键打开菜单

    因为自己一直用Editplus作为文本打开工具,新的电脑将压缩文件复制了过来,但是没有右键打开了. 第一打开注册表 在命令框中输入regedit 第二在注册表中输入选项 如下图所示在下拉菜单中新建Ed ...

  10. Qt--自定义View

    这是上一篇文章的续篇,关于自定义View. 多个View内部可以映射到同一个数据模型,也可以映射不同的数据结构:可以使用所有数据,也可以只使用部分数据.因为视图层与数据层的分离,操作相对比较灵活. 1 ...