分类
- R(Running): 进程正在执行或者在等待CPU时间片来执行。
- S(Stopped): 进程被用户或其他进程暂停,一般是通过发送SIGSTOP信号实现的。
- D: 磁盘休眠状态,有时候也叫做不可中断睡眠状态,这个状态中进程通常会等待IO结束。
- T(暂停): 进程已经执行完成或者被手动终止,等待被系统清理。
- X: 死亡状态,这个状态只是一个返回状态,你不会在列表中看到这个状态。
- Z(Zombie):僵尸状态,一种濒临死亡的状态。
- t:追踪状态,由我们控制程序一步一步执行,比如调试的过程。
1. R(运行)状态
运行状态,在处理队列的时候,所有在排队的进程都是处于R状态的。
#include<stdio.h>
int main()
{
while(1);
}
查看进程,发现是R+状态,表示处于前台正在运行状态。
2. S状态
在进程需要使用磁盘进行读写的时候,需要磁盘为其分配资源再由CPU对其进行读写,但如果磁盘没有就绪,那么此时操作系统会将想要调用磁盘资源的进程放到一个名为等待队列的队列中。
处于该队列中的进程处于S状态。当磁盘空间就绪后,进程重新加入运行队列进入R状态。
3. D状态
S状态表示浅度睡眠,是可以终止的。深度睡眠D是不可以终止的。
操作系统中拒绝的想要将信息写到磁盘的进程将会进入深度睡眠状态。
//测试S进程
while(1)
{
printf("test S proess\n");
}
运行后发现处于S+状态,这时因为printf需要对外设-显示器进行打印的,而显示器比较慢,等待其就绪是需要时间的,因此大部分时间处于S+状态,只有少部分时间处于R状态。
4. T状态
处于暂停状态,此时信息没有任何更新,是完全的暂停。
而处于S状态的进程会有一些数据更新,比如睡眠了多少秒等。
5. X状态
死亡状态,CPU会进行资源的回收,包括PCB和代码数据等。
6. Z状态
僵尸状态,即濒死状态。
这一状态的作用是为了帮助我们在进程死亡之前了解它是自然退出还是被OS或者其他程序所干掉的。此时会产生进程退出的信息,并将其写入task_struct(PCB)中。
我们知道处于X状态的进程中的资源会被回收,回收者为该进程的父进程。如果还没有对其进行回收的话,那么此时该进程处于Z状态。
7. t状态
追踪状态,例如调试过程。