如上,这是一幅常见的进程执行状态的示意图,在进程控制块一节中讲过进程的状态信息存储在task_struct也就是PCB 中。
意义
进程状态的意义:方便操作系统快速判断进程,完成特定的功能,比如调度,本质是一种分类
具体状态
R:运行态,不一定正在占用CPU: 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里
S:睡眠状态,意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠
D:磁盘休眠状态:有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的 进程通常会等待IO的结束,进程如果处于D状态,不可被杀掉。
T:暂停状态,彻底的暂时进程的数据不会更新
t:追踪状态
X:死亡状态,死亡需要回收进程资源
Z:僵尸状态,为什么要有僵尸状态,为了辨别退出死亡原因,进程退出的信息(在task_struct),正常程序退出先进入Z状态把进程退出信息保存到PCB当中,再进入X死亡状态退出
状态演示
R状态
测试代码如下:
#include<unistd.h>
#include<unistd.h>
int main()
{
while(1)
{
}
return 0;
}
使用
while :; do ps axj | head -1 && ps axj | grep test ; sleep 1; echo "###########################";done
,该命令进行监控程序运行情况。
可以看到当前进程处于运行状态,后面的+代表在前台运行
S状态
测试代码如下:
#include<stdio.h>
#include<unistd.h>
int