多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 进程状态 进程状态的定义在[fs/proc/array.c](https://github.com/torvalds/linux/blob/b6da0076bab5a12afb19312ffee41c95490af2a0/fs/proc/array.c)文件中 ``` /* * The task state array is a strange "bitmap" of * reasons to sleep. Thus "running" is zero, and * you can test for combinations of others with * simple bit tests. */ static const char * const task_state_array[] = { "R (running)", /* 0 */ "S (sleeping)", /* 1 */ "D (disk sleep)", /* 2 */ "T (stopped)", /* 4 */ "t (tracing stop)", /* 8 */ "X (dead)", /* 16 */ "Z (zombie)", /* 32 */ }; ``` ### 进程状态转换 ![](https://tobegit3hub1.gitbooks.io/understanding-linux-processes/content/process_basic/image/status_transform.svg) 如: 就绪状态的进程只要等到CPU调度它时就马上转为运行状态,一旦它需要的IO操作还没有返回时,进程状态也就转换成等待状态 ### 查看状态 通过 `ps aux` 查看 - O:进程正在处理器运行,这个状态从来没有见过. - S:休眠状态(sleeping) - R:等待运行(runable)R Running or runnable (on run queue) 进程处于运行或就绪状态 - I:空闲状态(idle) - Z:僵尸状态(zombie) - T:跟踪状态(Traced) - B:进程正在等待更多的内存页 - D: 不可中断的深度睡眠,一般由IO引起,同步IO在做读或写操作时,cpu不能做其它事情,只能等待,这时进程处于这种状态,如果程序采用异步IO,这种状态应该就很少见到了