网站是做后台好还是做前台好,wordpress防截屏,宠物网站开发,四大商业网站目录 一#xff0c;进程状态
1#xff0c;进程状态的分类
2.状态的本质
3.进程状态详解
1.运行状态
2.阻塞状态
3.挂起状态
4.Linux内核中的状态分类 一#xff0c;进程状态
1#xff0c;进程状态的分类 如下图#xff1a; 在计算机中我们的状态的分类便如下图所示…
目录 一进程状态
1进程状态的分类
2.状态的本质
3.进程状态详解
1.运行状态
2.阻塞状态
3.挂起状态
4.Linux内核中的状态分类 一进程状态
1进程状态的分类 如下图 在计算机中我们的状态的分类便如下图所示但是我们在这篇博客里只讲三个状态 1.运行状态2.阻塞状态3.挂起状态。 2.状态的本质 其实状态的本质便是在进程PCB里面存放的一个字段这个字段的名称便是status。那就是说状态其实就是进程PCB里面的一个变量罢了 3.进程状态详解
1.运行状态 在什么情况下进程的状态才能被改为运行状态呢答案是当我们的进程被放入CPU的运行队列时在这里补充一个知识点每一个CPU在系统层面上都会维护一个运行队列 2.阻塞状态 何为阻塞状态呢所谓阻塞便是我们当前的进程需要等待先补充一个小知识便是在计算机中我们的底层硬件都会维护一个dev waitqueue。何时会出现阻塞状态呢比如说 在运行某些进程时我们必然会有进行IO操作的时候这个时候需要键盘等设备的输入。所以在我们的进程运行到要执行这些IO操作时我们的进程PCB会从运行队列里剥离出来而连接到dev维护的等待队列中。这个时候便出现了阻塞状态 3.挂起状态 所谓挂起状态其实也是阻塞状态的一种。但是为什么又要叫做挂起状态呢其实这是因为这种状态的出现是因为当我们的内存被占满的时我们的操作系统便要开始清理空间这时一些处于等待状态的PCB便被列入了清理对象的列表中于是等待状态的进程PCB就要被写入到磁盘里那么这个进程就被挂起了。它的状态也被叫做挂起状态了。 4.Linux内核中的状态分类 先来看看源代码 /*
* 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 */
};首先便来看看第一个状态。现在直接教大家一个可以比较方便的查看状态的指令 while :;do ps ajx | head -1 ps ajx | grep 程序名” | grep -v grep ;sleep 1;done;(一定要记住要在while后面加上空格) 现在来写一个程序代码如下 #includestdio.h#includeunistd.hint main(){while(1); return 0;} 查看状态如下 可以看到这个程序执行时便是运行状态,这个状态便是R。 现在将代码改造如下 1 #includestdio.h2 #includeunistd.h3 int main()4 {5 while(1)6 {7 printf(I am a process!\n);//bin加上一个IO操作。 8 sleep(1);//加上一个sleep()操作。9 }10 return 0;11 }接下来再来查看状态 这里便成为了阻塞状态了这个状态便是S。 第三个叫做D状态这个状态我们一般是见不到的如果被你见到了那你的计算机就离宕机不远了。这个D状态其实就是相当于一个免死金牌当我们系统中的内存被占满时我们的操作系统便要开始杀进程了但是某些进程可能在将自己的数据写入到磁盘中此时这个进程便处于D状态这时操作系统便不能杀死这个进程。 第四和第五个状态T与t都叫做停止状态第一个T是在普通情况下的停止状态。这个状态只有在我们使用kill指令让我们的程序终止时才会出现。这个kill指令的编号时-19。所以这条命令便是kill -19 pid。给一个运行的程序发送这条指令就会看到这个结果 出现了T。 当我们的的程序在debug模式下运行时在Makefile文件的gcc指令后面加上-g如果再次使用这条语句便会出现一个t: 第四个状态叫做X状态也就是死亡状态。当出现这个状态时我们的进程便已经将任务完成了于是这个进程便要将自己的PCB给销毁掉将空间还给操作系统。 第五个状态叫做Z状态这个状态叫做僵尸状态。这个状态与死亡状态的区别在于这个进程已经结束了但是它的PCB还没有被它的上一级进程回收。这样的进程便被叫做僵尸进程与之相反的便是孤儿进程孤儿进程便是当父进程结束子进程还在运行时出现的一种状态并且该子进程会被1号进程接管。