关注

【Linux】--进程状态

一、进程状态

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

每个进程其每时每刻都有其对应的状态

下面我们来看在具体的操作系统中是咋样的

在我们的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

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--