[Linux] Linux操作系统 进程的优先级 环境变量(一)

news2024/9/29 11:30:26

标题:[Linux] Linux操作系统 进程的优先级

个人主页@水墨不写bug

(图片来源于网络)

目录

一、进程优先级

1.PRI and NI

2.PRI vs NI 的补充理解

二、命令行参数和环境变量


正文开始:


一、进程优先级

基本概念

        进程的调用需要CPU,CPU对进程的资源分配的先后顺序,就是指进程的优先权(priority)。

        优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。

        还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。

查看当前的系统进程

        在linux或者unix系统中,用ps –l命令则会类似输出以下几个内容:

我们很容易注意到其中的几个重要信息,有下:

        UID : 代表执行者的身份

        【Linux下对用户的区分是按照一个特定的编号来进行的,这样做是为了提高效率,因为对字符串的比较需要O(N),而对于整形数字的比较只需要O(1)】

        PID : 代表这个进程的代号

        PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号

        PRI :代表这个进程可被执行的优先级,其值越小越早被执行

        NI :代表这个进程的nice值

1.PRI and NI

  • PRI(priority)也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。
  • 那NI就是我们所要说的nice值了,什么是nice值?其表示进程可被执行的优先级的修正数值。
  • PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为: PRI(new)=PRI(old)+nice
  • 这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行。
  • 调整进程优先级,在Linux下,就是调整进程nice值。(为什么不直接调整PRI呢?因为调整PRI的时机不是确定的。修改了进程A的优先级表示在调用队列中A的位置发生了变化,但是这是不符合CPU的调用公平原则的)
  • nice其取值范围是-20至19,一共40个级别。

当我们创建一个进程,他的优先级默认是80:我们可以修改它的优先级:

        首先进入top;输入r(renice);输入需要修改的进程pid;输入要修改的nice值即可。

 将进程的优先级调到最低:

将进程的优先级调到最低:

        进程的优先级是不能被频繁修改的,如果想要成功修改进程的优先级,需要切换到超级用户(root)

2.PRI vs NI 的补充理解

        需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化

        可以理解nice值是进程优先级的修正修正数据


二、命令行参数和环境变量

 命令行参数

        当初我们第一次打开编译器的时候,我们会发现默认的源文件里面的main函数是有参数的:

int main(int argc,char* argv[])
{
    //...
    return 0;
}

        其实即使没有参数,main函数还是可以正常运行的。

        如果main函数带了这些参数, 当我们调用这个可执行程序的时候,第一个参数就是我们调用的指令,如果我们在调用指令之后以空格为间隔,加上一些选项,这些选项会被以字符串的形式追加到 指针数组 argv[] 中。

        这些工作实际上是父进程Bash做的。Bash(命令行解释器)会解释输入的命令,每一个指令的执行其实就是一个子进程的创建、运行、返回。

        比如我们使用ls,可以加-a -l -al等:

ls -al 

        我们使用这样的指令,默认是输入给父进程bash的,父进程保存这些数据。由于子进程可以访问父进程数据,子进程mytest的main函数的参数是通过访问父进程的数据来传递的。


环境变量        

        我们生成的mytest可执行程序在执行的时候需要加上当前目录的标识符“./”然后加上程序名才能执行。但是我们最常使用的指令,比如:

        ls

        pwd

        cd

        等这些指令,却不需要指定这些程序文件的位置,为什么?

        其实操作系统是通过环境变量来找到这些程序的位置的。依靠的环境变量就是:

        PATH

        我们可以通过echo指令查看环境变量:

echo $PATH

         这些路径就是bash默认查找的路径:当我们执行常用的系统指令的时候,bash会默认在这些路径中查找指令的程序文件:

        如果找到,则加载到内存中运行;

        如果没有找到的,则报错:

         ls等这些系统指令是存储在/user/bin中的,如果我们想要让自己写的指令拥有与系统指令相同的“待遇”,有如下两种方法:

方法一:

        把自己的可执行程序拷贝到user/ben目录中。这样虽然可以达到目的,但是着实不太明智,这会污染系统的指令集。


方法二:

        我们可以把自己的可执行程序的路径添加到bash默认查找的路径中;这就需要更改

PATH环境变量,对于PATH环境变量的更改,有如下两种方法:

PATH=(指定的目录)

        这种方法会直接覆盖原来的默认路径。


PATH=$PATH:(指定的路径)

        这种方法会追加在原来默认路径的后面。

         我们更改了默认的搜索路径之后,就可以不用指定当前目录而执行自己的指令了。

但是当我们再次登录服务器的时候,会发现PATH环境变量被改回去了。这是因为环境变量是最开始不是在内存中,而是在系统对应的配置文件中的。 当我们登录服务器,bash启动就会把配置文件信息读取到环境变量中去。

        这就是读取环境变量的配置文件: (默认是在每个人的工作目录: cd ~ 的目录中)

         我们可以得出结论:环境变量是内存级的。



待续

未经作者同意禁止转载 

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

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

相关文章

Study--Oracle-09--部署Openfiler存储服务器

免费的存储服务器软件有FreeNAS 和 Openfiler。 其中Freenas的网站上只有i386及amd64的版本,也就是说Freenas不能支持64位版本的Intel CPU,而Openfiler则提供更全面的版本支持,在其网站上可以看到支持多网卡、多CPU,以及硬件Raid的…

manim中获取并定位不规则页面的中心位置

介绍中心点 找到中心点非常重要,因为它在多个领域中都有重要的应用和意义。中心点可以指一个几何形状的中心、数据集的平均值中心、或是特定情境下的关键焦点。以下是一些中心点重要性的具体解释: 数学与几何:在几何中,中心点&…

jinaai/jina-embeddings-v2-base-zh向量模型报错解决

报错信息 OSError: We couldn’t connect to ‘https://huggingface.co’ to load this file, couldn’t find it in the cached files and it looks like jinaai/jina-bert-implementation is not the path to a directory containing a file named configuration_bert.py. 报…

C++ | Leetcode C++题解之第441题排列硬币

题目: 题解: class Solution { public:int arrangeCoins(int n) {return (int) ((sqrt((long long) 8 * n 1) - 1) / 2);} };

探索Python新境界:funboost库揭秘

文章目录 探索Python新境界:funboost库揭秘背景:为什么选择funboost?funboost是什么?如何安装funboost?简单的库函数使用方法场景应用常见Bug及解决方案总结 探索Python新境界:funboost库揭秘 背景&#x…

什么是前缀索引?

什么是前缀索引? 1、什么是前缀索引?2、为什么要使用前缀索引?3、如何选择前缀长度?4、创建前缀索引的SQL语法5、示例 💖The Begin💖点点关注,收藏不迷路💖 在处理包含长字符串的数据…

yolo自动化项目实例解析(七)自建UI--工具栏选项

在上一章我们基本实现了关于预览窗口的显示,现在我们主要完善一下工具栏菜单按键 一、添加工具栏ui 1、配置文件读取 我们后面要改的东西越来越多了,先加个变量文件方便我们后面调用 下面我们使用的config.get意思是从./datas/setting.ini文件中读取关键…

RedisBoost Web缓存加速平台

1.产品介绍 产品名称:RedisBoost Web缓存加速平台 主要功能: 智能缓存策略配置 功能描述:RedisBoost提供了一套直观易用的缓存策略配置界面,允许用户根据业务场景自定义缓存策略,包括缓存时间(TTL)、缓存淘汰算法(如LRU、LFU)、数据分区与分片策略等。支持动态调整策…

SSM私人诊所管理系统—计算机毕业设计源码36406

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

Redis高级特性及应用

一、Redis慢查询 1.1 Redis命令流程 1.2 慢查询配置: 可以通过以下命令配置慢查询时间阈值(慢查询值得是上图中执行命令的时间,不包含其他时间) config set slowlog-log-slower-than 10000 //单位微秒 config rewrite //写入…

【设计模式-访问者模式】

定义 访问者模式(Visitor Pattern)是一种行为型设计模式,允许你在不修改已有类的情况下向这些类添加新的功能或行为。它通过将操作的执行逻辑从对象的类中分离出来,使得你可以在保持类的封闭性(符合开闭原则&#xff…

Leetcode 740. 删除并获得点数

原题链接:. - 力扣(LeetCode) 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和…

LeetCode题练习与总结:搜索二维矩阵 Ⅱ--240

一、题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],…

详细解析msyql和消息队列数据一致性问题

目录 前言 保持系统数据同步(双写问题) 消息队列消息丢失的问题 总结 前言 在当今互联网飞速发展的时代,随着业务复杂性的不断增加,消息队列作为一种重要的技术手段,越来越多地被应用于各种场景。它们不仅能有效解…

ChatGPT-o1用来进行数据分析,对比效果很惊人!

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 在进行数据分析的时候,通常有一个场景:我有一批数据,但是不知道该怎么分析,才能找到写论文的突破口和角度。ChatGPT能不能给我一…

Java项目实战II基于Java+Spring Boot+MySQL的厨艺交流平台设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在美食文化…

江协科技STM32学习- P20 实验-TIM编码器接口测速

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

游戏厅计时器ps5计算时间的软件 佳易王电玩计时计费管理系统操作教程

一、前言 游戏厅计时器ps5计算时间的软件 佳易王电玩计时计费管理系统操作教程 软件为绿色免安装版,解压即可使用。 二、软件程序教程 计时的时候,点击 开始计时按钮 开台后可设置定时语音提醒的时间 时间设置好后,点击 开启提醒 即可 三、…

无人机飞手入伍当兵技术优势分析

随着现代战争形态的不断演变,无人机技术在军事领域的应用日益广泛,成为提升军队作战能力的重要手段。对于无人机飞手而言,其专业技能和实战经验在入伍当兵后能够转化为显著的技术优势,为国防事业贡献重要力量。以下是从专业技能优…

“不关心⚠️Warning”的代价:http自动升级https导致免费的存储服务扣费

背景 7 月 12 日的时候我手机突然收到一条短信:显示我在 LeanCloud 平台的账户欠费了。虽然只是欠费 0.01 元,但还是有些疑惑,怎么免费的存储服务突然扣费了? 然而这只是个开始。起初我并没有很在意这扣费的 0.01 元(…