【探索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下,可以使用以下方法来查看环境变量:

  1. 使用"printenv"命令:
    在终端中输入"printenv"命令,将显示当前会话中的所有环境变量及其对应的值。

  2. 使用"echo"命令:
    可以使用"echo"命令来显示单个环境变量的值。例如,要查看"PATH"环境变量的值,可以输入以下命令:

echo $PATH

类似地,可以将"$"符号后面的部分替换为所需的环境变量名称。

  1. 使用"env"命令:
    "env"命令可以显示当前会话中的环境变量和其值。在终端中输入"env"命令即可显示所有环境变量。

  2. 查看特定配置文件:
    根据不同的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. 环境变量的特点

  1. 全局性:Linux环境变量是在整个操作系统级别定义和生效的。它们对所有用户和进程都是全局可见的,因此可以在系统中的任何位置和任何进程中使用和访问。

  2. 动态性:Linux环境变量可以在运行时动态地进行修改、添加或删除。这意味着可以根据需要更改环境变量的值,而无需重新编译或重启程序。

  3. 字符串格式:Linux环境变量的值通常以字符串的形式表示。这使得环境变量非常适合存储配置信息、路径、用户名等文本数据。

  4. 持久性:Linux环境变量可以在系统启动时由各种不同的方式进行设置。例如,在/etc/profile~/.bashrc/etc/environment 等文件中设置环境变量,使其在系统启动时自动加载。

  5. 继承性:Linux环境变量可以被派生进程继承。这意味着当创建子进程时,子进程会继承父进程的环境变量。这种特性使得环境变量可以在整个进程树中自动传递并共享。

  6. 临时性:Linux环境变量可以在当前的终端会话中设置,并在会话结束后自动消失。这对于临时设置和调试非常有用。

  7. SHELL变量和环境变量:在Linux中,有些特殊的环境变量被称为SHELL变量,用于控制和配置当前的Shell环境。这些变量在当前Shell中起作用,而不会传递给其他进程。

总结

一、进程优先级:

  1. 优先级概念:进程优先级决定了进程在系统资源分配和竞争中的优先级别。优先级较高的进程会在资源有限时获得更多的处理时间和资源。
  2. Linux查看系统进程:通过命令行工具如topps等可以实时查看系统中运行的进程以及它们的优先级信息。
  3. PRI(Priority)和NI(Nice):在Linux中,进程的优先级主要通过PRI和NI来表示。PRI的范围是-20(最高优先级)到+19(最低优先级),而NI的范围是-20到+19,它们之间存在一定的关系。较小的PRI值表示较高的优先级。

二、环境变量:
环境变量在Linux系统中具有重要作用,用于存储和传递配置信息、路径、用户名等。具体内容如下:

  1. 概念:环境变量是在操作系统层面上定义和生效的全局变量,它们可以在系统中的任何位置和任何进程中使用和访问。
  2. 查看环境变量方法:使用printenvecho命令可以在终端中查看当前环境变量的值,或者通过env命令列出所有环境变量。
  3. 环境变量的组织方式:环境变量以key-value的形式存储,其中key是变量名,value是变量的值。多个环境变量以列表或配置文件的形式进行组织。
  4. 通过代码获取环境变量:可以使用编程语言提供的函数如getenv来获取指定环境变量的值,然后在代码中进行使用。
  5. 环境变量的特点:环境变量具有全局性、动态性、文本格式等特点。它们可以全局共享、动态修改,适应不同的环境和配置需求。

温馨提示

感谢您对博主文章的关注与支持!如果您喜欢这篇文章,可以点赞、评论和分享给您的同学,这将对我提供巨大的鼓励和支持。另外,我计划在未来的更新中持续探讨与本文相关的内容。我会为您带来更多关于Linux以及C++编程技术问题的深入解析、应用案例和趣味玩法等。如果感兴趣的话可以关注博主的更新,不要错过任何精彩内容!

再次感谢您的支持和关注。我们期待与您建立更紧密的互动,共同探索Linux、C++、算法和编程的奥秘。祝您生活愉快,排便顺畅!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/70204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ - 多态的实现原理

前言 本博客主要介绍C 当中 多态语法的实现原理&#xff0c;如果有对 多态语法 有疑问的&#xff0c;请看下面这篇博客&#xff1a; 探究&#xff0c;为什么多态的条件是那样的&#xff08;虚函数表&#xff09; 首先&#xff0c;调用虚函数必须是 父类的 指针或 引用&#xf…

KT142C-sop16语音芯片ic的功能介绍 支持pwm和dac输出 usb直接更新内置空间

1.1 简介 KT142C是一个提供串口的SOP16语音芯片&#xff0c;完美的集成了MP3的硬解码。内置330KByte的空间&#xff0c;最大支持330秒的语音长度&#xff0c;支持多段语音&#xff0c;支持直驱0.5W的扬声器无需外置功放 软件支持串口通信协议&#xff0c;默认波特率9600.同时…

opencv旋转图像

0 、使用旋转矩阵旋转 import cv2img cv2.imread(img.jpg, 1) (h, w) img.shape[:2] # 获取图像的宽和高# 定义旋转中心坐标 center (w / 2, h / 2)# 定义旋转角度 angle 90# 定义缩放比例 scale 1# 获得旋转矩阵 M cv2.getRotationMatrix2D(center, angle, scale)# 进行…

比亚迪海豹:特斯拉强劲对手,瑞银拆解成本比同级车型低15%~35%

瑞银证券日前对中国电动车产品比亚迪海豹进行了拆解&#xff0c;发现海豹具有强大的成本优势&#xff0c;而这个优势主要来自于中国本土生产和国内完善的电动车供应链以及比亚迪的垂直整合体系和零部件高度集成性。比亚迪的整车成本比同级别竞争车型分别低15%至35%。 瑞银预测&…

【100天精通Python】Day55:Python 数据分析_Pandas数据选取和常用操作

目录 Pandas数据选择和操作 1 选择列和行 2 过滤数据 3 添加、删除和修改数据 4 数据排序 Pandas数据选择和操作 Pandas是一个Python库&#xff0c;用于数据分析和操作&#xff0c;提供了丰富的功能来选择、过滤、添加、删除和修改数据。 1 选择列和行 Pandas 提供了多种…

学习Bootstrap 5的第六天

目录 信息警告框 警告框 实例 警告框链接 实例 关闭警告框 实例 警告框动画 实例 按钮 按钮样式 实例 按钮轮廓 实例 ​编辑按钮尺寸 实例 块级按钮 实例 实例 活动/禁用按钮 实例 加载器按钮 实例 扩展小知识 信息警告框 警告框 警告框是使用 .aler…

ETCD详解

一、etcd概念 ETCD 是一个高可用的分布式键值key-value数据库&#xff0c;可用于服务发现。 ETCD 采用raft 一致性算法&#xff0c;基于 Go语言实现。 etcd作为一个高可用键值存储系统&#xff0c;天生就是为集群化而设计的。由于Raft算法在做决策时需要多数节点的投票&…

【算法】归并排序 详解

归并排序 详解 归并排序代码实现1. 递归版本2. 非递归版本 排序&#xff1a; 排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a; 假定在待排序的记录序列中&#xff0c;存在多个具有相…

eclipse进入断点之后,一直卡死,线程一直在运行【记录一种情况】

问题描述: 一直卡死在某个断点处&#xff0c;取消断点也是卡死在这边的进程处。 解决方式&#xff1a; 将JDK的使用内存进行了修改 ① 打开eclipse&#xff0c;window->preference->Java->Installed JREs&#xff0c;选中使用的jdk然后点击右侧的edit&#xff0c;在…

【算法】插入排序

插入排序 插入排序代码实现代码优化 排序&#xff1a; 排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a; 假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&…

npm/yarn link 测试包时报错 Warning: Invalid hook call. Hooks can only be called ...

使用 dumi 开发 React 组件库时&#xff0c;为避免每次修改都发布到 npm&#xff0c;需要在本地的测试项目中使用 npm link 为组件库建立软连接&#xff0c;方便本地调试。 结果在本地测试项目使用 $ npm link 组件库 后&#xff0c;使用内部组件确报错&#xff1a; react.dev…

“安全即服务”为网络安全推开一道门

8月30日&#xff0c;三六零&#xff08;下称“360”&#xff09;集团发布了2023年半年报&#xff0c;其中安全业务第二季度收入6.54亿元&#xff0c;同比增长98.76%&#xff0c;环比增长157.16%&#xff0c;安全第二增长曲线已完全成型&#xff01;特别值得一提的是&#xff0c…

高速路自动驾驶功能HWP功能定义

一、功能定义 高速路自动驾驶功能HWP是指在一般畅通高速公路或城市快速路上驾驶员可以放开双手双脚&#xff0c;同时注意力可在较长时间内从驾驶环境中转移&#xff0c;做一些诸如看手机、接电话、看风景等活动&#xff0c;该系统最低工作速度为60kph。 如上两种不同环境和速度…

Vue+NodeJS+MongoDB实现邮箱验证注册、登录

一.主要内容 邮件发送用户注册用户信息存储到数据库用户登录密码加密JWT生成tokenCookie实现快速登录 在用户注册时,先发送邮件得到验证码.后端将验证进行缓存比对,如果验证码到期,比对不正确,拒绝登录;如果比对正确,将用户的信息进行加密存储到数据库. 用户登录时,先通过用…

LRTimelapse 6 for Mac(延时摄影视频制作软件)

LRTimelapse 是一款适用于macOS 系统的延时摄影视频制作软件&#xff0c;可以帮助用户创建高质量的延时摄影视频。该软件提供了直观的界面和丰富的功能&#xff0c;支持多种时间轴摄影工具和文件格式&#xff0c;并具有高度的可定制性和扩展性。 LRTimelapse 的主要特点如下&am…

Leetcode刷题笔记--Hot41-50

1--二叉树的层序遍历&#xff08;102&#xff09; 主要思路&#xff1a; 经典广度优先搜索&#xff0c;基于队列&#xff1b; 对于本题需要将同一层的节点放在一个数组中&#xff0c;因此遍历的时候需要用一个变量 nums 来记录当前层的节点数&#xff0c;即 nums 等于队列元素的…

全网独家:编译CentOS6.10系统的openssl-1.1.1多版本并存的rpm安装包

CentOS6.10系统原生的openssl版本太老&#xff0c;1.0.1e&#xff0c;不能满足一些新版本应用软件的要求&#xff0c;但是它又被wget、mysql-libs、python-2.6.6、yum等一众系统包所依赖&#xff0c;不能再做升级。故需考虑在不影响系统原生openssl的情况下&#xff0c;安装较新…

HarmonyOS/OpenHarmony(Stage模型)应用开发单一手势(三)

五、旋转手势&#xff08;RotationGesture&#xff09; RotationGesture(value?:{fingers?:number; angle?:number}) 旋转手势用于触发旋转手势事件&#xff0c;触发旋转手势的最少手指数量为2指&#xff0c;最大为5指&#xff0c;最小改变度数为1度&#xff0c;拥有两个可…

mac安装adobe需要注意的tips(含win+mac all安装包)

M2芯片只能安装2022年以后的&#xff08;包含2022年的&#xff09; 1、必须操作的开启“任何来源” “任何来源“设置&#xff0c;这是为了系统安全性&#xff0c;苹果希望所有的软件都从商店或是能验证的官方下载&#xff0c;导致默认不允许从第三方下载应用程序。macOS sie…

力扣(LeetCode)算法_C++——寻找重复的子树

给你一棵二叉树的根节点 root &#xff0c;返回所有 重复的子树 。 对于同一类的重复子树&#xff0c;你只需要返回其中任意 一棵 的根结点即可。 如果两棵树具有 相同的结构 和 相同的结点值 &#xff0c;则认为二者是 重复 的。 示例 1&#xff1a; 输入&#xff1a;root…