> 文章列表 > 【Linux】进程优先级前后台理解

【Linux】进程优先级前后台理解

【Linux】进程优先级前后台理解

环境:centos7.6,腾讯云服务器
Linux文章都放在了专栏:【Linux】欢迎支持订阅🌹
相关文章推荐:
【Linux】冯.诺依曼体系结构与操作系统

【Linux】进程理解与学习(Ⅰ)

浅谈Linux下的shell--BASH

【Linux】进程理解与学习(Ⅱ)
(本人非科班的一名大三小白,目前就读于安徽大学。刚入坑半年左右,每个人都可以学习编程,心有所向方能一无所往🌹)


进程优先级

概念

  • 所谓进程优先级,实际上就是CPU资源分配的先后顺序。说白了就是谁的优先级高,谁就先被CPU调度。由于CPU的资源有限,为了更好的提高系统的性能,最大程度的合理分配CPU的资源,CPU会根据进程的优先级进行调度。

“插队”与“抢占”

  • 我们知道,处于R状态的进程是指该进程的PCB处在运行队列中,等待被CPU调度,而队列我们知道它的特点,即先进先出,但是因为有了优先级的存在,就会出现所谓的插队现象。并且当代计算机都是支持“抢占”的。也就是说,假如一个进程正在运行时,突然来了一个优先级更高的进程,OS就会调用一些函数将该进程从CPU上剥离,然后把优先级高的放进去。

【Linux】进程优先级前后台理解

“插队”

进程优先级的查看

我们可以输入一些指令,比如ps -l,或者top等一些指令,来观察进程的优先级。

【Linux】进程优先级前后台理解

ps -l查看当前bash下的进程

其中PRI表示进程的优先级(Priority),PRI越低,表示该进程的优先级越高。由于PRI是内核动态调整的,我们无法干涉。但是我们可以通过调整NI(nice)值,来调整进程的优先级。

进程优先级的调整

首先我们来看一下公式:

  • PRI(new) = PRI(old) +nice

🔴注意点:
  • PRI(old)一般都是值起始的那个值80

  • root用户可以修改自己或他人进程的nice值,范围为-20~19

  • 一般用户仅可以调整自己进程的nice值,范围为0~19,这是为了避免一般用户抢占系统资源

  • 一般用户仅可将nice值越调越高,也就是说假如第一次调的时候,nice为5,则下一次只能调nice>5

  • 有两种方式调整nice值:nice指令一开使执行某个程序时,就给定一个指定的nice值;renice指令调整某个已经存在的PID的nice值。

nice与renice
  • 首先是nice指令,可以理解为初始化PRI,即在执行这个进程的时候,就通过NI设置了PRI。nice -n num 进程将进程的NI设置为num值(普通用户num范围:[0,19]

  • &放中间的意思是使&左右两边的指令同时执行。

【Linux】进程优先级前后台理解

接下来是renice修改已经存在的进程的NI。指令renice 数字 PID:将pid的进程的NI修改为指定数字。

【Linux】进程优先级前后台理解
通过top调整

我们还可以通过top指令来调整

我们先输入指令top,然后按r键,接着输入进程的pid,然后输入想要修改的NI值,就可以对进程的PRI进行调整。

【Linux】进程优先级前后台理解

演示

后台理解

前台

我们来谈一谈什么是前台,很好理解。假如此时我们只有一个终端,此时出现提示字符让我们操作的环境就是前台。举个例子,我们输入指令vim,此时会进入vim的操作平台,这时我们就处于前台状态。
而像我们在bash下执行我们的程序时,比如执行不断地打印,这些打印情况等我们都可以看到,这就是前台进程。就像Windows下的qq,此时我打开qq,并且处在它的界面上使用,此时qq就是一个前台进程。

【Linux】进程优先级前后台理解

总结一句话:可以被我们人为控制与执行命令的环境就是前台,Linxu下的前台进程可以使用ctrl c指令中止。

后台

而后台就是指任务可以自动执行,不用我们人为干预,我们也无法使用ctrl c中止。

【Linux】进程优先级前后台理解

就像Winodws下的这104个后台进程,会自动执行,不需要我们来操心。

Linux下的前后台切换

合理的利用前后台可以提高我们的工作效率,举个例子来说,Linux下假如我们正在传输一个文件,而处于前台环境下,我们无法做别的事情,只能等传输完毕后,才可以进行干别的事。再比如,我们处在vim下,而此时我们想使用命令行界面操作一些别的指令,此时处在前台的我们,是无法做到在一个终端环境下,既使用vim,又使用命令行界面。
那我们就可以将vim扔到后台,处理完我们的事后再从后台拿到前台,继续使用vim。不过需要注意的是:放入后台的任务想要继续运行时,必须不能与用户交互。就好像vim,我们只可以把它放进后台,让vim在后台处于暂停状态,但不可以让vim在后台处于运行状态,因为vim进程的执行,需要与我们形成交互,是需要我们用户输入数据(比如写代码等)

查看目前后台任务

我们可以通过指令jobs -l,来查看后台任务

Done表示该进程执行结束
Running表示正在运行
Terminated 表示该进程已被中止
Stopped表示该进程暂停
Killed表示该进程被杀掉

直接将命令丢到后台中执行-->&

我们可以在一个命令的最后面加上&,这样就可以将该命令放在后台去执行。如下:

【Linux】进程优先级前后台理解
将当前任务丢进后台-->ctrl z

ctrl z表示将当前任务丢进后台,并处于暂停。比如此时打开vim,我们按下ctrl z,就会将vim丢进后台并暂停该进程。我们此时输入fg num,就会将编号为num的后台任务拿到前台来处理(只输入fg会默认拿出最近放入的后台进程到前台)。

如下:

【Linux】进程优先级前后台理解

当然,我们也可以输入bg num 可以使后台编号为num的进程处于运行状态(后台进程运行的前提是不会与用户交互,比如vim只能在后台处于暂停,因为vim的运行需要与用户交互)。

如何杀掉后台进程

后台进程使用ctrl c是杀不掉的,只可以使用kill指令

【Linux】进程优先级前后台理解

我们可以输入kill -9 pid指令杀掉进程,或者killall 进程名 杀掉,亦或者kill -9 %num 杀掉后台进程编号为num的进程。

🔴小总结:
  • 前台任务可以使用ctrl c中止后台任务不可使用ctrl c中止

  • 在指令最后方加上&,表示将该指令丢在后台,并执行

  • ctrl z会将当前任务丢进后台,并处于暂停状态

  • 我们丢进后台的进程都会有编号,我们可以输入指令:fg 编号,就会将该编号的进程从后台拿到前台,输入指令:bg 编号使该编号的后台进程从暂停变成执行

  • 后台任务的执行需要一个条件:后台任务不会与用户进行交互

  • 指令:jobs -l可以查看当前bash(只能查看当前bash下的)下的后台任务

  • 使用kill -9 PID 或者kill all 进程名 或者kill -9 %编号,都可以杀掉后台进程。

  • jobs下的+表示最近丢进后台的进程-表示最近第二个被丢进后台的进程

  • 我们之前ps axj指令下的状态后面加一个加号, 表示该进程处于前台状态(比如:S+),状态后面没有加号(比如S),表示该进程在后台


end.

生活原本沉闷,但跑起来就会有风!🌹