目录 :
1.状态的认识
2.具体状态的学习
3.验证 R S T Z(引出孤儿进程)状态
4.前台、后台运行程序
--------------------------------------------------------------------------------------------------------------
1.状态的认识
进程的状态信息在哪里呢???
task_struct (PCB)
进程状态的意义:方便OS快速判断进程,完成特定的功能,比如调度,本质就是对众多状态的分类!!!!!
2.具体状态的学习
1.R状态 :运行状态
2.S (sleeping)和 D(disk sleep) 状态
那么当磁盘可以读的时候,磁盘一旦可以读,要做的不是将等待队列的进程去读磁盘,而是将这个进程的状态设为R状态(换而言之就是这个进程等待成功了),将这个等待成功的进程挪到CPU的运行队列上。CPU开始调度下一个进程。
所谓的进程,在运行的时候,有可能因为运行需要,可以会在不同的队列里
在不同的队列里,所处的状态是不一样 的
3. T(stopped) :暂停状态
4.X(dead) : 死亡状态 --》回收进程资源 = 进程相关的数据结构 + 你的的代码和数据
5.Z(zomble):僵尸状态
为什么要用僵尸状态:为了辨别这个进程退出死亡的原因
死亡状态并不是立即回收进程资源,而是在死亡状态之前进入僵尸状态,保存进程退出的信息
进程退出的信息也是数据被写在在PCB中,供我们的系统或父进程读取
3.验证 R S T 状态
1.R状态的验证
2.S状态
同时这个例子,也能看出外设和CPU相比是非常慢的
当CPU把PCB放在外设的等待队列时,看着程序一直在打印,可在CPU看来,这个进程一直在等待队列中等待
所以为什么我们在看R状态时我们只有空语句,因为外设太慢了CPU会认为这个进程一直在等待,但是当这个进程没有需要访问外设时,CPU会一直运行这个循环进程,只需要排队等这个CPU资源就可以
3.T状态 :暂停这个进程
首先我们先学一下如何暂停一个进程
向进程发送信号的方式来开始和暂停一个进程
如何发信号给我们的目标进程呢
kill -信号编号 进程PID
也就查看到了我们的T状态
这时候我们再想干掉这个进程我们需要 kill -9 PID
4.Z状态 : 僵尸状态
我们用下面这段程序来看僵尸进程
这个时候,当我们的子进程都退出的时候,父进程一旦终止,虽然我们的父进程没有回收子进程,我们的操作系统也会想办法回收这个子进程的
但只要我们的父进程一直不终止,且父进程也不回收,,那么这个僵尸进程可能会一直存在
------------------------------------------------------------------------------------------------------------------
上面的是子进程退出,父进程仍在运行的情况(子进程先于父进程死亡)
那么我们如果将父进程先于子进程死亡(但是子进程一直运行)
此时这个子进程是孤儿进程,这个子进程被1号进程收养(1号也就是操作系统)
4.前台、后台运行程序
前台进程 :在命令行运行我的程序的时候,就比如 pwd ls 等这些指令都是在前台运行的
,在前台运行的时候,ls pwd touch 等是不起作用的
后台进程:在运行程序的时候 带一个 &符号,就是后台进程,后台进程最明显的表现就是可以执行你的命令