Linux 进程状态 概念 Process State Definition
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的更多相关文章
- Linux 进程状态标识 Process State Definition
From : http://www.linfo.org/process_state.html 译者:李秋豪 进程状态标识是指在进程描述符中状态位的值. 进程,也可被称为任务,是指一个程序运行的实例. ...
- Linux进程状态 ( Linux Process State Codes)
进程状态代码及说明: STATE代码 说明 D 不可中断的睡眠. 通常是处于I/O之中. R 运行中/可运行. 正处于运行队列中. S 可中断的睡眠. 等待某事件发生. T 已停止. 可能是因为she ...
- Linux 进程状态【转】
转自:http://www.cnblogs.com/itech/p/3208261.html 来自: http://blog.csdn.net/tianlesoftware/article/detai ...
- linux进程状态详解(转)
Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态. 在下文将对进程的 R.S.D.T.Z.X 六种状态做个说明. PROCESS ...
- Linux进程状态解析
引言 Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态. 在下文将对进程的R.S.D.T.Z.X 六种状态做个说明. PROCE ...
- ORA-00020: No more process state objects available故障一例
今天公司一大早收到通知,昨天数据库数据未生成.当时查看跑批的日志,发现平常只需运行半个小时的过程,今天整整运行了7个小时(明显存在问题),导致后续数据正常时间读取失败.为了了解起因,查看了oracle ...
- Linux进程状态查询
进程状态详细说明 Linux进程状态详细解析 ps 的参数说明 ps 提供了很多的选项参数,常用的有以下几个: l 长格式输出: u 按用户名和启动时间的顺序来显示进程: ...
- [进程管理]Linux进程状态解析之T、Z、X
Linux进程状态:T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态. 向进程发送一个SIGSTOP信号,它就会因响应该信号而进入 ...
- [进程管理]Linux进程状态解析之R、S、D
Linux是一个分时操作系统,能够在一个cpu上运行多个程序,每个被运行的程序实例对应一个或多个进程,这里介绍一下Linux进程状态. Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个 ...
随机推荐
- 201521123005《java程序设计》第五周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 接口 有点类似继承中父类与子类的关系 方法声明和常量值的集合 对行为的抽象 一种 ...
- 第2周作业-Java基本语法与类库(20170227-20170304)
本周学习总结 (1)这周学习认识和熟悉了java的一些类型和变量: (2)学习了java的运算符基本使用方法: (3)了解了如何建立远程仓库和本地仓库,和如何让java代码在临时储存,本地仓库和远程仓 ...
- 201521123108 《Java程序设计》第13周学习总结
1. 本周学习总结 2. 书面作业 Q1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 答: 回复 ...
- Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN
快速入门 使用 Spark Shell 进行交互式分析 基础 Dataset 上的更多操作 缓存 独立的应用 快速跳转 本教程提供了如何使用 Spark 的快速入门介绍.首先通过运行 Spark 交互 ...
- Spring MVC的文件上传
1.文件上传 文件上传是项目开发中常用的功能.为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data.只有在这种情况下,浏览器才会把用户 ...
- 关于maven中一些问题的解决尝试
在maven中会遇到很多问题,pom.xml啊,数据库没有自动建表等等. 需要先把运行项目,所依赖的jar项目install安装一下,然后Maven --> update project 一下. ...
- CryptoTools加密与解密
CryptoTools加密与解密 java常用的加密算法有MD5(Message Digest algorithm 5,信息摘要算法) BASE64(严格地说,属于编码格式,而非加密算法) SHA(S ...
- Java并发之线程间的协作
上篇文章我们介绍了synchronized关键字,使用它可以有效的解决我们多线程所带来的一些常见问题.例如:竞态条件,内存可见性等.并且,我们也说明了该关键字主要是一个加锁和释放锁的集成,所有为能获得 ...
- String和StringBuffer分别作为参数传递注意项
public staticvoid main(){ String s1 = "abc"; StringBuffer sb = new StringBuffer(); sb.appe ...
- 系统学习java高并发系列二
转载请注明原创出处,谢谢! 什么是线程? 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程 ...