一、进程状态
下面是操作系统的教材中的对于状态的说明:

每个进程其每时每刻都有其对应的状态
下面我们来看在具体的操作系统中是咋样的
在我们的Linux系统下其有如下几种:

1、运行状态
运行状态:表示处于正在被CPU执行的进程或者就是已经准备好被CPU执行的进程
其状态码为:R
首先就是,并不是只有在CPU的执行中才是运行,CPU中有一个FIFO调度队列,然后我们的进程其都有自己的task_struct,要运行的时候就会有序的去运行队列进行排队。
那么我们要注意的是,只要在这个队列中,那么就是处于运行状态的。


如上我在text中使用一个
2、阻塞状态
阻塞状态:当进程缺少外设硬件的输入,比如我们需要用户输入密码的情况,那么此时就不会继续运行。
状态码:S
我们的硬件,操作系统对其管理,也有一个结构体,我们假设名字为:struct device
这个结构体中,包含了硬件的所有属性,还有一个结构体指针和一个等待队列:
struct task_struct*wait_queue。
那么当我们的进程需要得到这个硬件的反馈的时候,那么就会进入到这个队列中,那么我们的这个进程此时就会处于阻塞状态。
所以运行和阻塞我们本质就是看:进程的task_struct在谁提供队列中。

使用上面的指令我们可以查看我们的进程状态:
ps ajx |head -1 && ps ajx |gred 程序名
可以看到我们当前的STAT为S+(+表示我们的程序为前台应用)
我们的text.c文件中,其实就是一个scanf函数,那么这个函数就会请我们来向键盘要一个输入,所以其进入了阻塞状态。
3、挂起状态
挂起状态:
挂起是进程脱离了就绪队列或者阻塞队列,而且不会被CPU调度,操作系统将一个进程挂起是对于内存的优化方式,然后也是保证我们系统运行稳定的一种保障。
引起挂起的原因有如下几种:
1、用户手动挂起,用户通过终端或者工具进程主动暂停,但是这个进程后续还是需要使用的。好 比如我们在Linux通过Ctrk+Z来终止一些程序。
2、操作系统优化:操作系统对进程的调度会为了提升整个机器的运行效率,将一些低优先级的进 程先挂起。
3、调试器或异常处理,就比如我们使用gdb的时候对代码打断点。
挂起状态的现象:
1、离开CPU调度队列
2、进程的数据和代码还会被保留,唤醒后还可以无缝衔接的执行
3、执行暂停
注意:挂起状态对于资料的占用还是一样的,只不过对于内存的资源占用的减少到,但是其这个也增加了磁盘的空间负担。
我们的挂起状态是将进程的数据和代码放入到磁盘中,磁盘中有一个swap分区。
D磁盘休眠状态(不可中断休眠状态)
这个状态一般是在等待IO的时候会进入这个状态。
当我们的进程还没被CPU调度的时候,此时若我们的内存空间不足,那么我们的操作系统会将进程的PCB保留,然后将代码和数据放入到swap分区,这个过程叫做换出(swap out )
然后将数据和代码从swap分区拿出来的时候叫做换入(swap in)
当这样处理后,若内存资源还是严重不足的话,那么就会杀进程,但是有时候一些进程是在执行一些很重要的事情,那么我们总不能也杀了吧,所以这就是不可中断休眠,也叫做深度睡眠状态来防止重要的数据的丢失。
停止状态(T stopped)
这个可以通过kill发送信号来停止这个进程

我们看19和18
发送kill -19就是让这个进程变成T状态
然后kill -18就是恢复到运行状态
4、死亡状态
僵尸状态:
状态码:Z
当子进程退出的时候,要是父进程没有反馈,那么就会导致子进程一直处于僵尸状态。
那么僵尸状态是干嘛用的呢?
就比如领导让我们的是干点啥活,然后我们干完回来,但是没有给领导反馈,那么领导也不会知道你有没有干。
我们的子进程运算完,如果直接杀掉,那么我们也没法知道子进程做的工作是否完成。
僵尸状态会一直在进程表中,会一直等待父进程读取退出状态代码。
所以僵尸状态的情况就是只要子进程退出了,但是父进程还在运行,父进程没有读取子进程的状态,那么子进程就会进入僵尸状态。
僵尸状态的危害:
1、会导致资源的占用,导致系统运行卡顿,虽然僵尸状态不会再进入到CPU中运行,但是其会占 用PID资源,那么要是我们的一个父进程就很多子进程,那么就会导致资源被占满了。
2、会导致内存泄漏的问题
5、孤儿进程
父进程如果提前退出,子进程还在的话,那么我们的操作系统咋处理呢?
首先就是父进程先退出,。子进程还在的话,那么这个子进程就成为了孤儿进程
那么我们对于孤儿程序要如何处理呢?
我们的操作系统会将其的ppid变成1。
所以孤儿进程会被1号进程收养。
而且其变成孤儿进程后,会被调整为后台进程。
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2302_81083101/article/details/159685501



