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

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

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

浅谈Linux下的shell--BASH

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

进程优先级

概念

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

“插队”与“抢占”

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

“插队”

进程优先级的查看

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

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]

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

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

通过top调整

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

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

演示

前后台理解

前台

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

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

后台

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

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

Linux下的前后台切换

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

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

Done表示该进程执行结束
Running表示正在运行
Terminated 表示该进程已被中止
Stopped表示该进程暂停
Killed表示该进程被杀掉
直接将命令丢到后台中执行-->&

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

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

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

如下:

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

如何杀掉后台进程

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

我们可以输入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.

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


http://www.ppmy.cn/news/32502.html

相关文章

watershed 算法原理以及skimage/opencv中的使用

watershed参考分水岭算法代码opencvscikit-image参考 scikit_image中的watershed说明 OpenCV—图像分割中的分水岭算法原理与应用 图像分割的经典算法:分水岭算法 分水岭算法 上图可以描述传统的分水岭算法,这样的算法可能会导致分割过细,遇…

Android Studio开发APP

1.下载Android Studio 官网下载:Android Studio for Window ... 百度云下载:android-studio-bundle-141.1903250-windows.exe Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用…

stm32外设-中断详解

0. 写在最前 本栏目笔记都是基于stm32F10x 1. 中断是啥? 什么是中断:CPU在处理某一事件A时,发生的另外某一事件B请求CPU去处理(产生了中断),随后CPU暂时中断当前正在执行的任务,去对事件B进行处…

ChatGPT研究分析:GPT-4做了什么

前脚刚研究了一轮GPT3.5,OpenAI很快就升级了GPT-4,整体表现有进一步提升。追赶一下潮流,研究研究GPT-4干了啥。本文内容全部源于对OpenAI公开的技术报告的解读,通篇以PR效果为主,实际内容不多。主要强调的工作&#xf…

第十四届蓝桥杯模拟赛【第三期】Python

1 进制转换 问题描述   请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。   请将这个数的十进制形式作为答案提交。 答案:2730 def ch…

Java每日一练(20230312)

目录 1. 两数之和 II ★ 2. 反转链表 ★★ 3. 二叉树的层序遍历 II ★★★ 🌟 每日一练刷题专栏 C/C 每日一练 ​专栏 Python 每日一练 专栏 Java 每日一练 专栏 1. 两数之和 II 给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数…

Pandas数据操作详解-总结

pandas简介pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。pandas 是 Python 的核心数…

三分钟了解http和https

对应测试人员都会听过http请求和响应.在这里给大家介绍http相关的知识 一.http和https基本概念 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本…