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

简介: 【Linux】进程优先级&前后台理解

进程优先级



概念


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


“插队”与“抢占”


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


1.png


“插队”


进程优先级的查看


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


2.png


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])


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


3.png


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


4.png


通过top调整

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


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


5.gif


演示


前后台理解



前台


我们来谈一谈什么是前台,很好理解。 假如此时我们只有一个终端,此时出现提示字符让我们操作的环境就是前台。举个例子,我们输入指令vim,此时会进入vim的操作平台,这时我们就处于前台状态。

而像我们在bash下执行我们的程序时,比如执行不断地打印,这些打印情况等我们都可以看到,这就是前台进程。就像Windows下的qq,此时我打开qq,并且处在它的界面上使用,此时qq就是一个前台进程。


6.png


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


后台


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


7.png


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


Linux下的前后台切换


合理的利用前后台可以提高我们的工作效率,举个例子来说,Linux下假如我们正在传输一个文件,而处于前台环境下,我们无法做别的事情,只能等传输完毕后,才可以进行干别的事。再比如,我们处在vim下,而此时我们想使用命令行界面操作一些别的指令,此时处在前台的我们,是无法做到在一个终端环境下,既使用vim,又使用命令行界面。

那我们就可以将vim扔到后台,处理完我们的事后再从后台拿到前台,继续使用vim。不过需要注意的是: 放入后台的任务想要继续运行时,必须不能与用户交互。就好像vim, 我们只可以把它放进后台,让vim在后台处于暂停状态,但不可以让vim在后台处于运行状态,因为vim进程的执行,需要与我们形成交互,是需要我们用户输入数据(比如写代码等)

查看目前后台任务

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


Done表示该进程执行结束

Running表示正在运行

Terminated 表示该进程已被中止

Stopped表示该进程暂停

Killed表示该进程被杀掉

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

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


8.png


将当前任务丢进后台-->ctrl z

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


如下:


9.gif


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


如何杀掉后台进程

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


10.png


我们可以输入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),表示该进程在后台。


相关文章
|
4月前
|
监控 编译器 Python
如何利用Python杀进程并保持驻留后台检测
本教程介绍如何使用Python编写进程监控与杀进程脚本,结合psutil库实现后台驻留、定时检测并强制终止指定进程。内容涵盖基础杀进程、多进程处理、自动退出机制、管理员权限启动及图形界面设计,并提供将脚本打包为exe的方法,适用于需持续清理顽固进程的场景。
|
7月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
281 67
|
6月前
|
Web App开发 Linux 程序员
获取和理解Linux进程以及其PID的基础知识。
总的来说,理解Linux进程及其PID需要我们明白,进程就如同汽车,负责执行任务,而PID则是独特的车牌号,为我们提供了管理的便利。知道这个,我们就可以更好地理解和操作Linux系统,甚至通过对进程的有效管理,让系统运行得更加顺畅。
198 16
|
6月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
137 20
|
5月前
|
监控 Shell Linux
Linux进程控制(详细讲解)
进程等待是系统通过调用特定的接口(如waitwaitpid)来实现的。来进行对子进程状态检测与回收的功能。
123 0
|
5月前
|
存储 负载均衡 算法
Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
174 0
|
5月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
121 0
|
5月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
148 0
|
8月前
|
存储 Linux 调度
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
317 4
|
8月前
|
Linux Shell
Linux 进程前台后台切换与作业控制
进程前台/后台切换及作业控制简介: 在 Shell 中,启动的程序默认为前台进程,会占用终端直到执行完毕。例如,执行 `./shella.sh` 时,终端会被占用。为避免不便,可将命令放到后台运行,如 `./shella.sh &`,此时终端命令行立即返回,可继续输入其他命令。 常用作业控制命令: - `fg %1`:将后台作业切换到前台。 - `Ctrl + Z`:暂停前台作业并放到后台。 - `bg %1`:让暂停的后台作业继续执行。 - `kill %1`:终止后台作业。 优先级调整:
596 5