当前位置:   article > 正文

Linux—进程状态_linux查看sleeping进程

linux查看sleeping进程

为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。
在这里插入图片描述
进程的状态在哪里呢?

进程状态在进程控制块PCB中

进程的意义是什么呢?

方便OS快速判断进程,完成特定的功能,比如调度。本质上是一种分类。

具体状态

R状态 (running):运行状态

运行状态一定占用CPU嘛? 不一定!
R状态只要是在运行队列中都叫R状态
并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里在这里插入图片描述

S状态(sleeping):睡眠状态

意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。

D磁盘休眠状态(Disk sleep)

有时候也叫不可中断睡眠(深度睡眠)状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。

S和D状态有什么区别呢?

当进程处于D状态时,该进程不可被杀死。S状态时,系统是可以杀掉该进程。

进程等待

当我们完成某种任务的时候,任务条件不具备,需要进程进行某种等待。
在这里插入图片描述
所谓的进程,在运行的时候,有可能因为运行需要,可能会在不同的队列里!!
在不同的队列,所处的状态是不一样的!
进程的本质是一种分类,我们用不同的队列来分类!

我们把从运行状态的task_struct(run_queue)放到等待队列中,就叫做挂起等待(阻塞);
从等待队列,放到运行队列,被CPU调度就叫做唤醒进程。

T状态:停止状态(stopped)

可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。

X状态:死亡状态(dead)

一旦死亡了,就意味着会回收它的资源,这里的资源 = 进程相关的内核数据结构+你的代码和数据;
这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

Z状态:僵尸状态 (zombie)

为什么要有僵尸状态呢?

因为需要辨别进程死亡退出的原因。
那如何辨别呢?

查看进程退出的信息
进程退出的信息也是数据,这个数据跟进程强相关,保存在task_struct。

进程退出过程

一个进程的退出并不是直接退出的,而是先让这个进程进入僵尸状态,然后系统会将进程退出的所以信息写在这个进程的PCB里面,供系统或父进程来读取。

所以当进程退出时不立即释放我们的进程,而让我们这个进程的退出信息暂时维护起来,此时这种状态的task_struct就叫做僵尸也叫做Z状态。

所以正常的进程死亡流程是:先是Z状态,然后由Z变成X状态,最后程序才被释放掉。

进程状态查看

R状态查看

在这里插入图片描述

S状态查看

在这里插入图片描述
但是我们发现我们的代码明明还在跑,为什么会是S状态呢?

代码在向显示器上打印数据,因为显示器是外设,相对于CPU来说,显示器非常的慢,IO等待外设就绪是需要花时间的,所以我们查看时大部分都是S状态。
在这里插入图片描述

T状态查看

首先我们要了解两个信号
在这里插入图片描述
然后这时我们就可以向进程发送暂停信号
在这里插入图片描述
也可以向进程发送继续信号
在这里插入图片描述

但是此时我们发现R信号后面没有带+号,并且我们向进程发送Ctrl+C时无法结束进程了,为什么呢?

因为我们发送暂停和继续此时进程变成了后台运行。

那怎么暂停这个程序呢?

向进程发送9号信号就可以了。
在这里插入图片描述

Z状态查看

如何查看Z状态呢?

当子进程退出,父进程没有回收子进程时,此时的子进程的状态就是Z状态。
先设置出父子进程,运行时让父进程休眠,子进程运行。
在这里插入图片描述

子进程没有退出时的状态

在这里插入图片描述

杀掉子进程

在这里插入图片描述
杀掉子进程后子进程状态为Z
在这里插入图片描述
因为此时父进程没有及时回收子进程,导致子进程变成Z状态。

僵尸进程危害

父进程如果一直不读取,那子进程就一直处于Z状态?是的!
维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中。换句话说,Z状态一直不退出,PCB一直都要维护?是的!
那一个父进程创建了很多子进程,就是不回收,是不是就会造成内存资源的浪费?是的!
因为数据结构对象本身就要占用内存,想想C中定义一个结构体变量(对象),是要在内存的某个位置进行开辟空间!
内存泄漏?是的

孤儿进程

如果此时父进程先退出而子进程还没退出会怎么样呢?

此时子进程就称之为“孤儿进程”

那么子进程后退出,进入Z之后,那该如何处理呢?

孤儿进程会被被1号init进程领养,当然要有init进程回收喽。

孤儿进程查看

父子进程运行一段时间后父进程退出

在这里插入图片描述

父进程退出

子进程变成孤儿进程,被一号进程(操作系统)领养。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/1013804
推荐阅读
相关标签
  

闽ICP备14008679号