【Hello Linux】进程优先级和环境变量(一)

简介: 【Hello Linux】进程优先级和环境变量(一)

进程的优先级

基本概念

  1. 什么是进程优先级?

cpu资源分配的先后顺序 就是指进程的优先权(priority)

  1. 优先级存在的原因?

优先级存在的原因本质上是因为资源的不足 在系统中表现为有多个进程却只有一个cpu

如何查看优先级

我们可以使用ps -l指令来查看进程

其中有五个进程是比较重要的 我们这里拿出来单独解释下

  • UID 代表执行者的身份
  • PID 代表进程的代号
  • PPID 代表父进程的代号
  • PRI 代表进程的优先级
  • NI 代表这个进程的nice值 用来修正进程的优先级

PRI与NI

  • PRI是进程的优先级 通俗点说就是程序被CPU执行的先后顺序 此值越小进程的优先级别越高
  • NI值就是我们所要说的nice值了 其表示进程可被执行的优先级的修正数值
  • PRI和NI值的关系符合下面的公式 PRI(new) = PRI (old)+ NI
  • 当NI值为负值的时候 那么该程序将会优先级值将变小 优先级会变高
  • 调整进程优先级 就是调整进程的nice值
  • nice的取值范围是-20~19 一共四十个值

在Linux系统中 PRI(old)值默认为80 所以说Linux中的优先级为 PRI(new) = 80 + NI

NI值的设置范围

NI的设置范围是固定的 必须是-20~19 如果超出这个值 则设定的nice值会变为最接近这个区间的值

比如说我们设定NI值为-100 则它的值会被设置为-20

如果我们设定NI值为100 则它的值会被设置为19

为什么NI值的范围被设置成这样子

因为操作系统要尽量的保证每个进程的公平运行 如果我们可以随意将进程的优先级设置的很低那么操作系统就会倾向于执行这个进程 从而导致其他进程不能被很好的被cpu执行 所以说PRI值最好是在一个范围中

NI值如何修改

修改NI值实际上就是进程的优先级

对于NI值的修改 我们有两种方式

修改方式一 : 通过top指令修改优先级

top命令就相当于Windows操作系统中的任务管理器

我们调用top命令之后会出来这样子的界面

接下来我们按住 r 键 就可以它就会要求你输入需要调整NI值的进程PID

接下来我们输入PID之后回车 它就会让我们输入NI值

我们这里输入修改的NI值为15之后回车 按住q键 退出top

之后我们再次使用ps指令查看9188进程的优先级

我们可以看到 9188号进程的优先级确实变为75了 但是为什么进程号为 20236的优先级也变为95了呢?

这是因为20236是9188的子进程 会继承父进程的代码和数据

修改方式二 : 通过renice指令修改优先级

具体指令为renice + NI值 + 进程号

最后我们通过ps指令可以发现nice值被修改为了-20 最终的PRI值为60

此外需要注意的是 普通用户如果想要renice需要使用sudo指令 临时提升权限

进程优先级思维导图

进程的四个重要概念

  • 竞争性: 系统进程数目众多 而CPU资源只有少量 甚至1个 所以进程之间是具有竞争属性的 为了高效完成任务 更合理竞争相关资源 便具有了优先级
  • 独立性: 多进程运行 需要独享各种资源 多进程运行期间互不干扰
  • 并行: 多个进程在多个CPU下分别 同时进行运行 这称之为并行
  • 并发: 多个进程在一个CPU下采用进程切换的方式 在一段时间之内 让多个进程都得以推进 称之为并发

环境变量

引出

下面我们会有两段命令的执行来验证环境变量的存在

我们首先写出了ls命令 系统给我们列出来当前目录下的所有文件

我们在这里发现了一个可执行文件test

我们如果想要执行这个可执行文件的话必须要使用这样子的指令

现在的我们很容易理解 . 是代表当前目录的意思 / 是目录分隔符

所以说./代表的就是当前目录下 实际上就是给出了一个相对路径

让在这个相对路径中寻找一个名叫test的可执行文件

也就是说如果我们直接输入test命令 系统会不知道我们要干什么

通过前面的学习我们知道了指令实际上也是一个可执行文件

那为什么我们直接输入文件名就可以执行该文件呢?

这就是因为环境变量的存在

相关文章
|
11月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
364 67
|
10月前
|
Web App开发 Linux 程序员
获取和理解Linux进程以及其PID的基础知识。
总的来说,理解Linux进程及其PID需要我们明白,进程就如同汽车,负责执行任务,而PID则是独特的车牌号,为我们提供了管理的便利。知道这个,我们就可以更好地理解和操作Linux系统,甚至通过对进程的有效管理,让系统运行得更加顺畅。
275 16
|
10月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
188 20
|
9月前
|
监控 Shell Linux
Linux进程控制(详细讲解)
进程等待是系统通过调用特定的接口(如waitwaitpid)来实现的。来进行对子进程状态检测与回收的功能。
202 0
|
9月前
|
存储 负载均衡 算法
Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
273 0
|
9月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
163 0
|
9月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
222 0
|
12月前
|
Java Linux 应用服务中间件
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
1710 21
|
12月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
12月前
|
存储 Linux 调度
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
433 4