【探索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. 快排非递归 代码优化 排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性&…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...