【探索Linux】—— 强大的命令行工具 P.8(进程优先级、环境变量)

阅读导航
- 前言
- 一、进程优先级
- 1. 优先级概念
- 2. Linux查看系统进程
- 3. PRI(Priority)和NI(Nice)
- 二、环境变量
- 1. 概念
- 2. 查看环境变量方法
- 3. 环境变量的组织方式
- 4.通过代码获取环境变量
- 5. 环境变量的特点
- 总结
- 温馨提示
前言
前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的一些知识,也学习了一些Linux的基本操作,也了解并学习了有关Linux开发工具vim 、gcc/g++ 使用、yum工具以及git 命令行提交代码也相信大家都掌握的不错,上一篇文章我们了解了关于进程的基本概念,今天博主带大家了解一下 —— 进程优先级以及环境变量, 下面话不多说坐稳扶好咱们要开车了!!!😍
一、进程优先级
1. 优先级概念
进程优先级(Process Priority)是操作系统用来决定进程获取CPU资源的顺序的一种机制。一般来说,进程优先级较高的进程会获得更多的CPU时间片,从而更频繁地执行。进程优先级的设置通常由操作系统或系统管理员来决定,而不是由普通用户来指定。进程优先级的目的是根据进程的重要性或性能需求来分配系统资源,以实现对系统资源的合理分配和性能调整。较高优先级的进程通常会被更快地响应和执行,而较低优先级的进程则可能会被抑制或推迟。
2. Linux查看系统进程
在linux系统中,用ps –l命令则会类似输出以下几个内容:

我们很容易注意到其中的几个重要信息,有下:
- UID : 代表执行者的身份。
- PID : 代表这个进程的代号。
- PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号。
- PRI :代表这个进程可被执行的优先级,其值越小越早被执行。
- NI :代表这个进程的nice值。
3. PRI(Priority)和NI(Nice)
PRI是指进程的实际优先级(Priority)。在Unix/Linux系统中,PRI是一个整数值,代表了进程在调度时的优先级。较低的PRI值表示较高的优先级,而较高的PRI值表示较低的优先级。系统中的PRI值范围可以是不固定的,具体取决于操作系统的实现。
NI是指进程的Nice值(Nice Value)。Nice值是Unix/Linux系统中用于调整进程优先级的参数。Nice值的范围通常是从-20到19,其中-20是最高优先级,19是最低优先级。与PRI不同的是,较低的NI值表示较低的优先级,而较高的NI值表示较高的优先级。
PRI和NI之间存在一个简单的转换关系。通常,PRI = 20 + NI,即PRI值等于20加上Nice值。因此,通过修改NI值,可以间接地修改进程的PRI值,从而调整进程的优先级。
可以使用nice命令来设置进程的Nice值。例如,使用以下命令可以将进程的Nice值设置为10:
nice -n 10 command
其中,command是要执行的命令或程序。
除了使用nice命令外,还可以使用renice命令来修改已经运行的进程的Nice值。例如,使用以下命令可以将进程的Nice值修改为5:
renice -n 5 -p pid
其中,pid是要修改Nice值的进程的进程ID。
🚨🚨注意:只有具有足够权限的用户才能修改进程的NI值,一般需要管理员或具有特殊权限的用户才能进行修改。
二、环境变量
1. 概念
环境变量是操作系统中用于存储和管理系统级别的配置信息的一种机制。它们是由操作系统或应用程序设置的键值对,用于指定特定应用程序或整个系统在运行时的行为。环境变量通常包含一些重要的配置信息,如路径、语言、时区等。通过设置和读取环境变量,可以在不修改应用程序本身的情况下,对其进行配置和定制。应用程序可以使用环境变量来获取配置参数或根据不同的环境执行不同的操作。
在不同的操作系统中,设置和读取环境变量的方法可能会有所不同。例如,在Unix和Linux系统中,可以使用"export"命令设置环境变量,通过"$"符号引用环境变量的值。
2. 查看环境变量方法
在Linux下,可以使用以下方法来查看环境变量:
-
使用"printenv"命令:
在终端中输入"printenv"命令,将显示当前会话中的所有环境变量及其对应的值。 -
使用"echo"命令:
可以使用"echo"命令来显示单个环境变量的值。例如,要查看"PATH"环境变量的值,可以输入以下命令:
echo $PATH
类似地,可以将"$"符号后面的部分替换为所需的环境变量名称。
-
使用"env"命令:
"env"命令可以显示当前会话中的环境变量和其值。在终端中输入"env"命令即可显示所有环境变量。 -
查看特定配置文件:
根据不同的Linux发行版,可能会有不同的配置文件保存环境变量。在常见的发行版如Ubuntu和CentOS中,可以查看"/etc/environment"文件来获取全局环境变量的值。
注意:这些方法都是在终端中查看当前会话中的环境变量。如果您希望查看永久环境变量(即在每次登录时都生效的环境变量),则可以查看用户的bash配置文件,如~ /.bashrc或~/.bash_profile中的设置。
3. 环境变量的组织方式

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。
4.通过代码获取环境变量
- 命令行第三个参数
#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{int i = 0;for(; env[i]; i++){printf("%s\n", env[i]);}return 0;
}
- 通过第三方变量environ获取
#include <stdio.h>
int main(int argc, char *argv[])
{extern char **environ;int i = 0;for(; environ[i]; i++){printf("%s\n", environ[i]);}return 0;
}
libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。
5. 环境变量的特点
-
全局性:Linux环境变量是在整个操作系统级别定义和生效的。它们对所有用户和进程都是全局可见的,因此可以在系统中的任何位置和任何进程中使用和访问。
-
动态性:Linux环境变量可以在运行时动态地进行修改、添加或删除。这意味着可以根据需要更改环境变量的值,而无需重新编译或重启程序。
-
字符串格式:Linux环境变量的值通常以字符串的形式表示。这使得环境变量非常适合存储配置信息、路径、用户名等文本数据。
-
持久性:Linux环境变量可以在系统启动时由各种不同的方式进行设置。例如,在
/etc/profile、~/.bashrc或/etc/environment等文件中设置环境变量,使其在系统启动时自动加载。 -
继承性:Linux环境变量可以被派生进程继承。这意味着当创建子进程时,子进程会继承父进程的环境变量。这种特性使得环境变量可以在整个进程树中自动传递并共享。
-
临时性:Linux环境变量可以在当前的终端会话中设置,并在会话结束后自动消失。这对于临时设置和调试非常有用。
-
SHELL变量和环境变量:在Linux中,有些特殊的环境变量被称为SHELL变量,用于控制和配置当前的Shell环境。这些变量在当前Shell中起作用,而不会传递给其他进程。
总结
一、进程优先级:
- 优先级概念:进程优先级决定了进程在系统资源分配和竞争中的优先级别。优先级较高的进程会在资源有限时获得更多的处理时间和资源。
- Linux查看系统进程:通过命令行工具如
top、ps等可以实时查看系统中运行的进程以及它们的优先级信息。 - PRI(Priority)和NI(Nice):在Linux中,进程的优先级主要通过PRI和NI来表示。PRI的范围是-20(最高优先级)到+19(最低优先级),而NI的范围是-20到+19,它们之间存在一定的关系。较小的PRI值表示较高的优先级。
二、环境变量:
环境变量在Linux系统中具有重要作用,用于存储和传递配置信息、路径、用户名等。具体内容如下:
- 概念:环境变量是在操作系统层面上定义和生效的全局变量,它们可以在系统中的任何位置和任何进程中使用和访问。
- 查看环境变量方法:使用
printenv或echo命令可以在终端中查看当前环境变量的值,或者通过env命令列出所有环境变量。 - 环境变量的组织方式:环境变量以key-value的形式存储,其中key是变量名,value是变量的值。多个环境变量以列表或配置文件的形式进行组织。
- 通过代码获取环境变量:可以使用编程语言提供的函数如
getenv来获取指定环境变量的值,然后在代码中进行使用。 - 环境变量的特点:环境变量具有全局性、动态性、文本格式等特点。它们可以全局共享、动态修改,适应不同的环境和配置需求。
温馨提示
感谢您对博主文章的关注与支持!如果您喜欢这篇文章,可以点赞、评论和分享给您的同学,这将对我提供巨大的鼓励和支持。另外,我计划在未来的更新中持续探讨与本文相关的内容。我会为您带来更多关于Linux以及C++编程技术问题的深入解析、应用案例和趣味玩法等。如果感兴趣的话可以关注博主的更新,不要错过任何精彩内容!
再次感谢您的支持和关注。我们期待与您建立更紧密的互动,共同探索Linux、C++、算法和编程的奥秘。祝您生活愉快,排便顺畅!

相关文章:
【探索Linux】—— 强大的命令行工具 P.8(进程优先级、环境变量)
阅读导航 前言一、进程优先级1. 优先级概念2. Linux查看系统进程3. PRI(Priority)和NI(Nice) 二、环境变量1. 概念2. 查看环境变量方法3. 环境变量的组织方式4.通过代码获取环境变量5. 环境变量的特点 总结温馨提示 前言 前面我们…...
蓝牙协议栈BLE
前言 这阵子用到蓝牙比较多,想写一个专栏专门讲解蓝牙协议及其应用,本篇是第一篇文章,讲解低功耗蓝牙和蓝牙协议栈。 参考网上各大神文章,及瑞萨的文章,参考GPT,并且加入了一些本人的理解。 图片部分源自…...
企业架构LNMP学习笔记17
反向代理: 反向代理服务器和真实访问的服务器是在一起的,有关联的。 根据实际业务需求,分发代理页面到不同的解释器。常见于代理后端服务器。 安装apache服务器: yum install -y httpd 修改配置文件: vim /et/http…...
php 获取每月开始结束时间,指定月份的开始结束时间戳
php 获取指定月份的开始结束时间戳。 /** * * 获取指定年月的开始和结束时间戳 * param int $year 年份 * param int $month 月份 * return array(开始时间,结束时间) */ function getMonthBeginAndEnd($year 0, $month 0) {$year $year ? $year : date(Y);$month $month…...
Docker技术入门| Part03:Dockerfile详解(Dockerfile概念、Dockerfile 指令、使用Dockerfile构建镜像)
文章目录 1. Dockerfile概念2. Dockerfile 指令FROM 指定基础镜像RUN执行命令CMD 容器启动命令COPY 复制文件ADD 更高级的复制文件ENV 设置环境变量ARG 构建参数VOLUME 定义匿名卷EXPOSE 暴露端口WORKDIR 指定工作目录USER 指定当前用户LABEL 为镜像添加元数据SHELL 指令 3. 使…...
分享一个有意思的线程相关的程序运行题
翻开之前的代码,发现了一个有意思的代码,猜以下代码的运行结果: package thread;/*** author heyunlin* version 1.0*/ public class ThreadMethodExample {public static void main(String[] args) {Thread thread new Thread(new Runnabl…...
集合的进阶学习
集合体系结构 Collection 单列集合 包含List Set List 包含ArrayList LinkedList Set包含HashSet TreeSet HashSet包含LinkedHashSet List系列集合:添加的元素是有序的、可重复、有索引 Set系列集合:添加的元素是无序的、不重复、无索引 Collectio…...
Java真过饱和了吗?现在学Java迟了?
Java行业内幕揭秘 我是某有名机构的线下课Java老师,负责Java热门框架教学,如Spring、Spring MVC、Spring Boot。但最近被解雇了,让我来吐槽一下。Java现在的学习人数真的太多太多了。 Java的学习饱和度 Java学习的人太多,给你一…...
glibc2.35-通过tls_dtor_list劫持exit执行流程
前言 glibc2.35删除了malloc_hook、free_hook以及realloc_hook,通过劫持这三个hook函数执行system已经不可行了。 传统堆漏洞利用是利用任意地址写改上上述几个hook从而执行system,在移除之后则需要找到同样只需要修改某个地址值并且能够造成程序流劫持…...
linux-OpenSSL升级
1.安装编译所需的安装包 yum install -y gcc make perl zlib-devel 2.从 OpenSSL 官网下载(https://www.openssl.org/source/openssl-1.1.1v.tar.gz) 注:如果原先版本为1.x.x,升级时还是需要选择1.x.x 3. 编译安装 # 解压tar -xvf openssl-1.1.1v.tar…...
Nginx全家桶配置详解
源码包安装NGINX A,搭建Web Server,任意HTML页面,其8080端口提供Web访问服务,截图成功访问http(s)://[Server1]:8080并且回显Web页面。保留Server1,但是不允许直接访问Server 1,再部署1套NGINX …...
CMake生成Visual Studio工程
CMake – 生成Visual Studio工程 C/C项目经常使用CMake构建工具。CMake 项目文件(例如 CMakeLists.txt)可以直接由 Visual Studio 使用。本文要说明的是如何将CMake项目转换到Visual Studio解决方案(.sln)或项目(.vcxproj) 开发环境 为了生成Visual S…...
数学建模--K-means聚类的Python实现
目录 1.算法流程简介 2.1.K-mean算法核心代码 2.2.K-mean算法效果展示 3.1.肘部法算法核心代码 3.2.肘部法算法效果展示 1.算法流程简介 #k-means聚类方法 """ k-means聚类算法流程: 1.K-mean均值聚类的方法就是先随机选择k个对象作为初始聚类中心. 2.这…...
防坠安全带上亚马逊美国站要求的合规标准是什么?
防坠安全带 防坠安全带是一种防护装备,适合工人在高空作业时或在可能发生跌落的无防护边缘行走时穿着。防坠安全带设计用于包裹身体躯干,并将坠落力至少分布到大腿上部、骨盆、胸部和肩部。防坠安全带是固定物体与非固定物体之间的连接物,通…...
PDF转Word的方法分享与注意事项。
PDF和Word是两种常用的文档格式,它们各有优点,适用于不同的场景。然而,有时候我们需要将PDF转换为Word,以便更好地进行编辑和排版。本文将介绍几种常用的PDF转Word的方法,并分享一些注意事项。 一、PDF转Word的方法 使…...
gitlab配置webhook,commit message的时候校验提交的信息
在 GitLab 中配置 Webhook 来调用 Java 接口以校验 commit 信息,是很多公司的一些要求,因为提交信息的规范化是必要的 在 GitLab 项目中进入设置页面。 在左侧导航栏中选择 “Webhooks”(Web钩子)。 在 Webhooks 页面中点击 “…...
借助CIFAR10模型结构理解卷积神经网络及Sequential的使用
CIFAR10模型搭建 CIFAR10模型结构 0. input : 332x32,3通道32x32的图片 --> 特征图(Feature maps) : 3232x32即经过32个35x5的卷积层,输出尺寸没有变化(有x个特征图即有x个卷积核。卷积核的通道数与输入的通道数相等,即35x5&am…...
Java # Java基础八股
1、JVM、JRE、JDK之间的关系 个人理解:JVM可以帮助屏蔽底层的操作系统,使程序一次编译到处都可以运行,JVM可以运行class文件。JRE是java文件运行的环境,但不能新建程序,JRE包含JVM。JDK功能最齐全,包含了编…...
【Spring Boot】SpringBoot 2.6.6 集成 SpringDoc 1.6.9 生成swagger接口文档
文章目录 前言一、SpringDoc是什么?二、使用步骤1.引入库2.配置类3.访问测试 总结其他配置立个Flag 前言 之前常用的SpringFox在2020年停止更新了,新项目集成SpringFox出来一堆问题,所以打算使用更活跃的SpringDoc,这里简单介绍一…...
【算法】快速排序 详解
快速排序 详解 快速排序1. 挖坑法2. 左右指针法 (Hoare 法)3. 前后指针法4. 快排非递归 代码优化 排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性&…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
Qt的学习(二)
1. 创建Hello Word 两种方式,实现helloworld: 1.通过图形化的方式,在界面上创建出一个控件,显示helloworld 2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world; …...
Cursor AI 账号纯净度维护与高效注册指南
Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...
