linux进程状态1026,Linux进程状态分析
最近在看APUE过程中,遇到了一个有关于进程的“僵死进程”的状态。既然遇到了进程状态的问题,索性就查了查《Linux内核设计与实现》,里面给出了5种状态,分别是“TASK_RUNNING”、“TASK_INTERRUPTIBLE”、“TASK_UNINTERRUPTIBLE”、“__TASK_STOPPED”、“__TASK_TRACED”,但这5种状态中偏偏没有“僵死”这么一个状态,这到底是怎么一回事呢?
其实这个问题很好解决。我获取有关于进程状态信息的命令是什么?ps,没错。有关于进程状态的信息都来自于ps命令,那是否是ps的输出在误导我呢?
答案是肯定的,ps的输出确实在一定程度上误导了我,先来看看ps命令的输出,ps有关于进程状态的输出共有7中,分别是:
D uninterruptible sleep (usually IO) //不可中断睡眠
R running or runnable (on run queue) //正在执行或可执行
S interruptible sleep (waiting for an event to complete) //可中断睡眠状态
T stopped, either by a job control signal or because it is being traced //停止或追踪状态
W paging (not valid since the 2.6.xx kernel) //换页,但2.6之后内核已不再可用
X dead (should never be seen) //死亡,但应该永远也看不到
Z defunct ("zombie") process, terminated but not reaped by its parent //僵死状态(已经终止但还没有被父进程回收)
以上内容来自于man ps中“PROCESS STATE CODES”一节。
好了,以上就是ps的输出了,那么源码中是如何定义的呢?让我们来看看源码中是如何定义的,相关定义位于./include/linux/sched.h中:
#define TASK_RUNNING0
#define TASK_INTERRUPTIBLE1
#define TASK_UNINTERRUPTIBLE2
#define __TASK_STOPPED4 进程的执行被暂停,当进程接收到SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU信号后,进入暂停状态
#define __TASK_TRACED8
/* in tsk->exit_state */
#define EXIT_DEAD16
#define EXIT_ZOMBIE32
#define EXIT_TRACE(EXIT_ZOMBIE | EXIT_DEAD)
/* in tsk->state again */
#define TASK_DEAD64
#define TASK_WAKEKILL128
#define TASK_WAKING256
#define TASK_PARKED512
#define TASK_STATE_MAX1024
好了真相大白了,原来ps的输出与源码中的定义还不是完全一致的,这也就造成了我通过ps输出的结果与《Linux内核设计与实现》中写的内容不同。
既然是谈“僵死状态”,那就详细研究一下这个状态。“EXIT_ZOMBIE”状态表示进程的执行被终止(注意是已经终止了,而不是暂停,进程暂停了还能恢复),但是父进程还没有发布wait4()或waitpid()系统调用来返回有关死亡进程的信息。“EXIT_ZOMBIE”与“EXIT_DEAD”状态即可以存放在进程描述符的state字段中,也可以存放在exit_state字段中。
至此我们已经了解了ps的输出与内核源码的定义,让我们来看看他们之间的对应关系。
ps命令输出
内核源码定义
D uninterruptible sleep (usually IO)
TASK_UNINTERRUPTIBLE
R running or runnable (on run queue)
TASK_RUNNING
S interruptible sleep (waiting for an event to complete)
TASK_INTERRUPTIBLE
T stopped, either by a job control signal or because it is being traced
__TASK_STOPPED or __TASK_TRACED
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
可能是EXIT_DEAD或TASK_DEAD,这一点还无法确认
Z defunct ("zombie") process, terminated but not reaped by its parent
EXIT_ZOMBIE or EXIT_TRACE
最后让我们看看各进程状态之间转化关系图。这幅图是我在网上的图的基础上稍加改变得到的。
linux进程状态1026,Linux进程状态分析相关推荐
- linux 进程状态 rl,Linux进程状态详解
Linux进程状态详解 以下部分的代码示例,来自于Linux内核的0.11版本源码 在定义进程的数据结构task_struct时,有一个state字段是用来表示进程状态的,这里总结了下关于state字 ...
- linux进程状态a,Linux进程冻结技术
Linux进程冻结技术 作者:itrocker 发布于:2015-11-24 15:01 分类:电源管理子系统 1什么是进程冻结 进程冻结技术(freezing of tasks)是指在系统hiber ...
- linux 进程状态 load,Linux - 系统指标 CPU load
cpu load cpu load通常做为一个机器负载的衡量指标 cpu load是对使用或者等待cpu进程的统计(数量的累加).每一个使用(using)或者等待(waiting)CPU的进程(pro ...
- linux 进程状态 dw,Linux之PID状态信息是如何来的之详解PID stat文件
摘要 在Linux上一切皆文件,哪怕你是硬件也是用文件的形式给呈现出来了,刚开始接触Linux的时候我对这话也是很莫名其妙,很难以理解,但是经过这么长时间的接触,平均每天有20%+的时间在Linux系 ...
- linux 进程状态ss,linux ss 命令用法说明
ss 是 Socket Statistics 的缩写.ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似.但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连 ...
- Linux下进程状态转换,Linux进程状态转换图
Linux进程状态 Linux内核中的进程状态 ◆运行状态(TASK_RUNNING) 指正在被CPU运行或者就绪的状态.这样的进程被成为runnning进程.运行态的进程可以分为3种情况:内核运行态 ...
- linux系统编程之进程概念(操作系统---管理,进程创建,进程状态,进程优先级, 环境变量,程序地址空间,进程O(1)调度方法)
系统编程: 进程概念->进程控制->基础IO->进程间通信->进程信号->多线程 进程概念 冯诺依曼体系结构----现代计算机硬件体系结构 冯诺依曼体系结构----现代计 ...
- 【Linux操作系统】Linux进程状态和两个特殊进程
文章目录 一.一套普适性的进程状态理论 1.运行 2.阻塞 3.挂起 二.一套具体的Linux进程状态 1.R-运行 2.S-睡眠 3.T-暂停 5.t-被追踪 三.僵尸进程和孤儿进程 1.僵尸进程 ...
- 操作系统原理,进程的基本状态,运行态,就绪态,等待态与转换模型,进程的其他状态,创建,终止,挂起与转换模型,Linux进程状态模型示例
操作系统原理,进程的基本状态,运行态,就绪态,等待态与转换模型,进程的其他状态,创建,终止,挂起与转换模型,Linux进程状态模型示例 一.进程的三种基本状态: 运行态,就绪态,等待态 1.运行态: ...
最新文章
- React中如何优雅的捕捉事件错误
- 面试中经常出现的算法2(整理)
- 成为优秀程序员的方法就是抛开编程?
- Windows下一个比较完美的线程池实现
- 学python最重要的是_基础、语法都不是最重要的,学Python最重要的是什么?编程思路!-站长资讯中心...
- [BTS]使用BizTalk开发应用系统,就是这么简单!
- C++string详解
- 10个人里有几个大学生?
- 用css3制作一个搜索框效果
- [转]UIViewController内存管理
- 问题(二)--算法相关
- 布线问题—分支限界—java实现
- 超声波清洗机是什么?
- 一元三次方程求根公式及韦达定理
- Netty编解码,粘包拆包及零拷贝
- 【高等数学】无穷数级
- cmd命令查询电脑序列号_如何使用指令提示符查看电脑序列号
- 用示波器调出李萨如图形
- 极简工作法则- 泰普勒人生
- 全新2022强大的趣味心理测试小程序源码,趣味测试引流裂变神器,流量主激励广告实现管道收益
热门文章
- GraphicsMagick OpenMP 性能比较(icc+iomp vs gcc+gomp)
- 小学英语计算机问卷调查,小学英语学习情况问卷调查.docx
- 实验5 MapReduce初级编程实践(Python实现)
- 问题 P: C语言实验 - 一元二次方程 II
- python字典操作函数_【python】字典的操作方法和函数
- 怎样利用github搭建个人博客
- 200万奖金广聚天下算法英雄,第二届广州·琶洲算法大赛要来了!
- 大学生利用漏洞“骗走”京东110万, 中心化白条的漏洞, 区块链能否补得上?
- 数据结构C语言版:魔术师发牌问题
- 每日辣评:电动牙刷是个新风口?蒋凡是个幸运者?蔚来不降价?