是一个整形变量,对应不同的整形,控制状态
对应调度队列
一个pcb既可以属于A数据结构也可以属于B数据结构
阻塞了进程链入设备的等待队列。
等待了,等键盘输出后,把等待队列链回运行队列
这里双指针指向指向内部
进程在调度队列中,进程的状态都是running
我们写的scanf()函数的时候,控制台卡住,等待键盘文件就绪, 所以我们阻塞状态就是等待每种设备或资源就绪。
如:键盘,显示器,网卡,键盘,摄像头,话筒。
管理硬件驱动,os也是先描述再组织
这是一个比较极端的情况
os内存严重不足的时候,不在运行的pcb的代码数据,也就是阻塞状态的时候,把该pcb的代码数据换入磁盘外设的交换区,这就叫做阻塞挂起 如果内存还是不足,也可能把运行队列末端的pcb代码数据换入,这就叫做运行挂起。
每隔一秒钟查一次进程的状态
每隔一秒查一查状态
这里&后缀,放在后台运行 kill -9 26168,结束运行。
这里都是进程都是s因为运行时间太短。
阻塞状态
暂停状态
这里按顺序操作打上断点
b9给第九行打断点
然后运行
这时候状态
这就是追踪暂停
ctrl+z命令行暂停是T状态
可中断休眠,浅度休眠 用ctrl+c中断s状态程序演示
disk sleep,也叫磁盘休眠
挂起的时候也无法节省空间,这时候可中断休眠就会杀掉该进程,满足其他进程, 举个列子如果该进程是传入磁盘的数据的进程,如果没传完就会丢失数据,进程也会被杀掉。
为了防止这个情况,就为了优化s状态,给了进程D状态,操作系统不能杀掉他,只有重启才能杀掉进程。
死亡状态
释放进程空间,代码,pcb,也就是kill 改进程
这里带前缀,信号方面问题。
(ZOMBIE)僵尸状态
因为所有进程都是一个进程的子进程,要么是bash的,要么是自己创建出来进程的子进程
获取死亡之前的进程信息,在释放之前,父进程要在子进程死亡之前获取执行的结果。
一般pcb会保留,因为pcb里有一些退出信息
我们不回收子进程,pcb不会退出,因为pid还在,pcb一直存在就会内存泄漏,malloc和僵尸进程都会内存泄漏