0
点赞
收藏
分享

微信扫一扫

【Linux】进程概念(下)

目录

👉进程状态👈

进程状态的普遍理解

操作系统的书籍一般都会给我们罗列出很多进程状态,比如:运行、新建、就绪、挂起、阻塞、等待和死亡等等。如此之多的概念,总会让我们学起来比较费劲。那操作系统会有如此之多的进程状态呢?其实是为了满足不同的运行场景。

对于人来说,对一件事的认识是不太可能建立在想象之上的。所以,我们先来了解一下操作系统的空间概念,看看普遍的操作系统层面是如何理解上面罗列的进程状态的。

运行、阻塞和挂起状态的讲解

在这里插入图片描述

Linux 系统的进程状态

以上是操作系统书籍对进程状态概念的定义,那么接下来我们就学习一下操作系统中具体的进程状态!

进程状态的描述

在这里插入图片描述

1.观察运行状态 R

在这里插入图片描述

在这里插入图片描述
上图的 R 就是运行状态,后面的 + 号以后会提及。

2.观察休眠状态 S

在这里插入图片描述

在这里插入图片描述

在我们看来,我们的程序是一致在运行的,那为什么进程状态是休眠状态呢?其实是因为 printf 函数是将字符串打印到显示器(外设)上的,而显示器的速度是比较慢的,需要等待显示器就行要花比较长的时间(对 CPU 而言)。所以 99 % 的时间都是等 IO 就绪,1% 的时间在执行打印代码,所以我们查到的进程状态绝大多数是休眠状态。

注:需要访问外设的进程,其状态绝大多数时间是休眠状态 S,也是阻塞状态的一种。

3.查看暂停状态 T

在这里插入图片描述

kill - 19 PID #使处于运行状态的进程改为暂停状态

在这里插入图片描述

注:暂停状态也是阻塞状态的一种,处于暂停状态的进程不知道是否被挂起,由操作系统决定。

kill - 18 PID #使处于暂停状态的进程改为运行状态

在这里插入图片描述

可以看到,此时的运行状态和最开始的运行状态相比,少了一个 + 号。能通过 Ctrl + c 键杀死的进程是前台进程,不能通过 Ctrl + c 键杀死的进程是后台进程。前台进程的状态比后台进程的状态多了一个 + 号。只能通过kill -9 PID来杀死后台进程。

注:在 Linux 系统中是看不到挂起状态的。因为用户只需要关心自己的进程是运行状态、休眠状态还是暂停状态,并不需要关心挂起状态。挂起状态是操作系统做内存管理将进程的代码和数据保存到磁盘上,我们并不需要知道,所以我们在 Linux 系统下是看不到挂起状态的。

4.深度睡眠状态 D

上面提到的休眠状态 S 是浅度睡眠状态,该状态是可以被终止的!而深度睡眠状态是很少见的,常见于高 IO、高并发的场景。在该状态下的进程,无法被操作系统杀死,只能通过断点或者进程自己醒来来解决。深度睡眠的状态只见于高 IO 的情况,大家可以通过dd指令浅浅地逝一下。

在这里插入图片描述

5.正在被追踪状态 t

在这里插入图片描述

注:T(tracing stop) 是暂停状态的一种,该状态 t 表示该进程正在被追踪(调试)。

Makefile 新语法

在这里插入图片描述

6.死亡状态 X

操作系统的书籍上都会给我们介绍进程的死亡状态,而在 Linux 系统中,我们无法验证一个进程是否死亡。当进程死亡时,操作系统会立即或延迟进程占用的资源。

7.僵尸状态 Z

进程被创建出来,就为了帮助操作系统或者用户完成某些任务。那对于操作系统和用户来说,肯定会关心该进程把任务完成的如何。那么进程退出的时候,就不能立即释放该进程对应的资源,而应该保存一段时间,让父进程或者操作系统来读取进程退出结果。如果父进程不读取子进程的退出结果,就会造成僵尸进程。

如何创建处于僵尸状态的进程?只要子进程退出,父进程还在运行,但父进程没有读取子进程的状态,子进程就会进入僵尸状态 Z。

在这里插入图片描述

while :; do ps ajx | head -1 && ps ajx | grep myprocess | grep -v grep; sleep 1; done #自动化监控脚本
#-v选项 grep搜索时过滤掉指定关键词

在这里插入图片描述

注:僵尸进程是有很大危害的,这个问题到进程控制模块会讲解!

僵尸进程的危害

👉孤儿进程👈

在这里插入图片描述

在这里插入图片描述
输入 kill -9 父进程PID 杀死父进程后,子进程就会被1号进程领养。那为什么看不到父进程变成僵尸进程呢?因为父进程也有父进程,其父进程是 bash,将其资源回收了,所以我们就看不到父进程的僵尸状态了。

1号进程就是操作系统!

在这里插入图片描述

👉进程优先级👈

基本概念

优先级和权限的区别:权限是能不能的问题,而优先级是谁先谁后的问题。为什么要存在优先级?因为资源太少了。优先级本质是 PCB 中的一个或者几个整数数字。

查看进程优先级

在这里插入图片描述

ps -la #查看进程的优先级

在这里插入图片描述

PRI 和 NI

修改 nice 值

在这里插入图片描述

在这里插入图片描述
注:nice 值的设置范围是 -20 到 19,设置太大或太小都不会超过该范围。因为 nice 值太大或太小都会影响 CPU 调用进程的公平性。每次修改 nice 值,都是在 PRI = 80 的基础上修改的。

👉其他概念👈

注:CPU 调度进程的方式,并不是将该进程执行完再去执行另一个进程,而是采取时间片轮转的方式来调度进程的。也就是将时间段切分为很多的小时间片,这个时间片来调度这个进程,这个时间片过后,该进程执行完毕或者重新到运行队列中排队。到了下一个时间片,就会去调度另外一个进程。这样,在一段时间内,多个进程都能够得以推进,这也就是并发。

👉进程切换👈

👉总结👈

举报

相关推荐

0 条评论