【Linux进行时】环境变量and进程优先级

在这里插入图片描述

1.环境变量

❓首先一个问题:我写的代码(这个代码很简单,不用管)编译之后运行的时候为什么要带./ ? 或者说我怎么才可以让我不用带./ ?

image-20230814154708538

💡.代表当前文件下,/是文件分隔符,这是用相对路径的方式来访问,所以我们也可以用绝对路径

myproc和ls都是指令,ls可以直接输入,但是我们直接输入myproc就不可以,只不过ls是纳入了linux的常用指令

🔥原因:我们的默认的程序在系统是会存在一个环境变量PATH,这个环境变量可以帮助我们通过该变量来在系统中在特定路径下去搜索命令

1.0.环境变量是什么?

window系统也有环境变量

image-20230814164254879

❓main函数可以带参吗,最多带几个呢

💡可以,常见是两个,最多是三个

image-20230814170347499

🔥指针和指针变量是两个概念

指针是地址,能表示地址都能叫指针;指针变量是一个变量开4个字节

envp是一个环境变量表:

image-20230925214901018

❓那么什么叫环境变量呢?

💡本质就是一个内存级的一张表,这张表由用户在登录系统的时候,进行给他特定用户形成属于自己的环境变量表环境变量中的每一个,都有自己的用途,有的是进行路径查找到,有的是进行身份认证的,有的是进行动态库查找的,有的是用来确认当前路径等等,每一个环境变量都有自己的特定应用场景,每一个元素都是kv结构的

❓那么环境变量对应的数据,都是从哪里来的呢?💡系统的相关配置文件中读取进来的

image-20230814182153839

🔥.=source

.也是个命令,让后面的配置文件立马生效

image-20230814185532007

argv就是一个表

image-20230815104608307

1.1.环境变量PATH概念:

  • 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

  • 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但

    是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

常见环境变量

PATH : 指定命令的搜索路径
HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
SHELL : 当前Shell,它的值通常是/bin/bash。

环境变量的组织方式:

image-20230925212150773

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串

**🔥前置:**在 Linux 命令行中,我们也是可以定义变量的,命令行变量分为两种:

  • 普通变量
  • 环境变量(具备全局属性)

1.2.查看环境变量方法

🔥查看所有的环境变量:env

image-20230925195738928

#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声明。

🔥系统中存在一个环境变量path,但是我们要查看的话,echo $环境变量名

image-20230814155512804

💡.根本原因是ls会在我们特定的环境变量所知名的路径中,而我们的可执行程序并没有在那个路径中,需要我们指明路径

环境变量 PATH
PATH中会承载多种路径,中间用冒号 ( : ) 作为分隔符。

我们再执行某一个程序时,比如执行 ls 时,我们的系统识别到 ls 的输入时,会在上面路径中逐个搜索,只要在特定的路径下找到了 ls,就会执行特定路径下的 ls 并停止搜索。

换言之,PATH
PATH 就提供了环境变量,可执行程序搜索的路径。

🔥可以查指令的路径:which 指令名

image-20230814160024803

🔥设置一个新的环境变量:export 环境变量名=路径

image-20230925201559854

❓那我们是不是可以试着把我们的程序加载到环境变量中呢?🔥显然是可以的啊

如果你想让你的环境变量设置永久有效的话,是需要更改配置文件的,该配置文件在系统当中,跟云服务器没有关系。

🔥把一个环境变量加到配置文件中export 环境变量名=$PATH:路径

在linux中,把可执行程序,拷贝到系统默认路径下,让我们直接访问的方式——相当于Linux下软件的安装!

export PATH=$PATH:/home/xiaolu/xiaolu_task/lesson2

!这里不是+号是等号

image-20230814161737701

🔥清除环境变量:unset 环境变量名

image-20230925203214959

🔥显示本地定义的shell变量和环境变量:set

🔥环境变量可以通过函数获取:getenv

image-20230814175932949

char *user=getenv("USER");7   if(user==NULL)perror("getenv");8   else printf("USER:%s\n",user);

image-20230814180459517

1.3.常见环境变量

我们先通过env查看一下所有的环境变量

image-20230925203625764

不知道大家有没有关注过,每次登陆服务器默认所处的路径?就是默认所处的工作目录。

root 用户的工作目录和普通用户的工作目录不同,那 Linux 是如何知道的呢?

  • HOME:指定用户的主工作目录(即用户登陆到 Linux 系统中时,默认的目录)

image-20230925204831319

  • PWD:显示当前目录。

image-20230925205021022

  • USER:显示当前谁在用系统

image-20230925204659566

  • SHELL:当前用户用的是哪种Shell。

image-20230925204135161

🔥得益于 Linux 存在历史命令的记录功能,我们可以在 Xshell 里 ↑ ↓ 显出历史命令,就像这样:

img

  • HISTSIZE:保存历史命令记录的条数。

image-20230925204321444

我们可以通过history指令去查看我们之前用的指令

image-20230925204500792

  • HOSTNAME:主机的名称,应用程序如果要用到主机名的话,通常是从这个环境变量中取得。

操作系统

  • LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

1.4.特性总结

命令行中启动的进程,父进程全部都是 bash 。

环境变量是可以被所有的子进程继承的——所以环境变量有全局性

本地变量和环境变量的根本区别在于:改变量是否能被子进程所继承

本地变量只在shell内部有效,不能被子进程继承

2.进程优先级

权限是能不能的问题,优先级是谁先执行的问题

❓为什么会有优先级?💡CPU资源有限

2.1.优先级概念

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

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

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

    体性能

2.2查看进程

🔥查看进程的优先级: ps -l

image-20230926005940080

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

  • UID : 代表执行者的身份
  • PID : 代表这个进程的代号
  • PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
  • PRI :代表这个进程可被执行的优先级,其值越小越早被执行
  • NI :代表这个进程的nice值

2.3.PRI and NI

PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小,进程的优先级别越高

那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值

  • PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice
  • 这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行
  • 所以,调整进程优先级,在Linux下,就是调整进程nice值
  • nice其取值范围是-20至19,一共40个级别。

PRI代表当前进程的优先级 ni代表当前进程的优先级修正数据

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

    程的优先级变化。

  • 可以理解nice值是进程优先级的修正修正数据可以通过代码来调,也可以用指令,也可以用top

2.4.进程优先级的修改

🔥修改优先级:top+按r 输入优先级的数值

image-20230926011436551

输入pid,然后输入ni值然后退出

我们假设给一号进程 -20的nice值的话,会出现报错

image-20230926011657731

如果你执意修改,你须具备 超级用户 的权限 —— 这里我们 sudo top 就行

值得强调的是,Linux 不允许用户无节制地设置优先级,设置的优先级范围不能逾过下列区间:[-20,19]

**注意:**每次设置优先级,这个 old 优先级都会被恢复成为 80 (跟上一次没关系)

image-20230926194739187
在这里插入图片描述

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

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

相关文章

数据库管理-第107期 Relocating PDB(20230927)

数据库管理-第107期 Relocating PDB&#xff08;20230927&#xff09; 在我长期的blog生涯&#xff0c;当需要迁移PDB的时候&#xff0c;出现了几种方式&#xff0c;基本上就是在线克隆或者datapump&#xff0c;然而这两种方式都需要一定的停机时间。在数据库版本一致的情况下…

MySQL - group by分组查询 (查询操作 三)

功能介绍 group by: 对数据进行分组和聚合操作(可以操作单字段和多字段) having&#xff1a;过滤group by的结果&#xff0c;也就是在分组后添加筛选条件 基础语法 select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having ]; where 和 having的区…

8个最受欢迎的可3D打印Minecraft模型

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 《我的世界》最令人兴奋的方面之一是其独特的视觉风格及其包含的所有细节。 市场上摆满了《我的世界》玩偶、乐高积木和其他玩具。如果你有 3D 打印机&#xff0c;则可以通过下载并 3D 打印这 8 种有趣的设计来激发你对 Mi…

数据包络分析——SBM模型

写在前面&#xff1a; 博主本人大学期间参加数学建模竞赛十多余次&#xff0c;获奖等级均在二等奖以上。为了让更多学生在数学建模这条路上少走弯路&#xff0c;故将数学建模常用数学模型算法汇聚于此专栏&#xff0c;希望能够对要参加数学建模比赛的同学们有所帮助。 目录 1. …

List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)

系列文章目录 SpringBootVue3实现登录验证码功能 Java实现发送邮件&#xff08;定时自动发送邮件&#xff09; 换个角度使用Redis去解决跨域存取Session问题 Redis缓存穿透、击穿、雪崩问题及解决方法 Spring Cache的使用–快速上手篇 更多该系列文章请查看我的主页哦 文章目录…

人工智能机器学习-飞桨神经网络与深度学习

飞桨神经网络与深度学习-机器学习 目录 飞桨神经网络与深度学习-机器学习 1.机器学习概述 2.机器学习实践五要素 2.1.数据 2.2.模型 2.3.学习准则 2.4.优化算法 2.5.评估标准 3.实现简单的线性回归模型 3.1.数据集构建 3.2.模型构建 3.3.损失函数 3.4.模型优化 3…

从零学算法(LCR 178)

教学过程中&#xff0c;教练示范一次&#xff0c;学员跟做三次。该过程被混乱剪辑后&#xff0c;记录于数组 actions&#xff0c;其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。 示例 1&#xff1a; 输入&#xff1a;actions [5, 7, 5, 5] 输出&#xff1a;7 …

LED显示屏主要由哪些部件组成?

LED显示屏是一种广泛用于信息显示和广告宣传的设备&#xff0c;通常由以下几个主要部件组成&#xff1a; LED模块&#xff1a;LED显示屏的核心部件是LED模块&#xff0c;它包括了许多小的LED灯珠&#xff0c;这些LED灯珠可以发光。LED模块的大小和密度决定了显示屏的分辨率和亮…

向《华为人》学习企业内刊的栏目设置和好故事撰写指南

昨天华研荟介绍了企业内刊是否需要办&#xff0c;如何办的有价值。今天给大家介绍具体的企业内刊栏目设置。 “它山之石&#xff0c;可以攻玉。”我们今天不谈理论&#xff0c;我们从实践中学习&#xff0c;来看看华为这座高山是如何做的&#xff0c;我们从华为的内刊《华为人…

位运算符与高级操作

位运算符与高级操作 运算符 高级操作 左移实现乘法 左移n位等价于乘以2的n次方 int x; x 2; x x << 2; x x << 3;使用左移实现乘法运算仅限于乘以2的倍数 是不是只要左移就能够实现乘以2的倍数呢? char x 120; x x << 1;右移实现除法 右移n位等价于除…

2023 “华为杯” 中国研究生数学建模竞赛(E题)深度剖析|数学建模完整代码+建模过程全解全析

​ 问题一 血肿扩张风险相关因素探索建模 思路&#xff1a; 根据题目要求,首先需要判断每个患者是否发生了血肿扩张事件。根据定义,如果后续检查的血肿体积比首次检查增加≥6 mL或≥33%,则判断为发生了血肿扩张。 具体判断步骤: (1) 从表1中提取每个患者的入院首次影像检查…

数据库:Hive转Presto(一)

本人因为工作原因&#xff0c;经常使用hive以及presto&#xff0c;一般是编写hive完成工作&#xff0c;服务器原因&#xff0c;presto会跑的更快一些&#xff0c;所以工作的时候会使用presto验证结果&#xff0c;所以就要频繁hive转presto&#xff0c;为了方便&#xff0c;我用…

蓝牙核心规范(V5.4)10.5-BLE 入门笔记之HCI

HCI全称:HOST Constroller Interface 主机控制器接口(HCI)定义了一个标准化的接口,通过该接口,主机可以向控制器发出命令,并且控制器可以与主机进行通信。规范被分成几个部分,第一部分仅从功能的角度定义接口,不考虑具体的实现机制,而其他部分定义了在使用四种可能的…

记一次springboot的@RequestBody json值注入失败的问题(字段大小写的问题)

有时候做后端开发时&#xff0c;难免会与算法联调接口&#xff0c;很多算法的变量命名时全部大写&#xff0c;在实际springmvc开发中会遇到无法赋值的问题。 先粘贴问题代码 entity类 Data NoArgsConstructor EqualsAndHashCode(callSuper true) ToString(callSuper true) …

十,从摄像机打印立方体的一个外表面

从摄像机是与主摄像机保持同样的投影矩阵&#xff0c;所以&#xff0c;不用单独设置。如果把漫游器还是在&#xff08;1&#xff0c;0,0)这个位置&#xff0c;各个从摄像机看向上下左右前后六个面&#xff0c;那么会出现什么现象呢&#xff1f;应该是x正轴打印出来&#xff0c;…

LLaMa

文章目录 Problems403 代码文件LLaMA: Open and Efficient Foundation Language Models方法预训练数据结构优化器一些加速的方法 结果Common Sense ReasoningClosed-book Question AnsweringReading ComprehensionMassive Multitask Language Understanding Instruction Finetu…

【实验记录】AGW | Visible-Infrared Re-ID

【RT】Visible Thermal Re-IDDeep Learning for Person Re-identification: A Survey and Outlook中提出了一个针对单/跨模态行人重识别的baseline&#xff1a;AGW 做过两次&#xff0c;在测试阶段有问题&#xff0c;现在再重做一次&#x1f914;Code RTX3090 修改数据集路…

【空间-光谱联合注意网络:多时相遥感图像】

A Spatial–Spectral Joint Attention Network for Change Detection in Multispectral Imagery &#xff08;一种用于多光谱图像变化检测的空间-光谱联合注意网络&#xff09; 变化检测是通过比较双时相图像来确定和评估变化&#xff0c;这是遥感领域的一项具有挑战性的任务…

c++图像的边缘检测

图像的边缘检测 cv::Canny 是 OpenCV 中用于进行边缘检测的函数&#xff0c;特别是用于检测图像中的边缘。Canny 边缘检测是一种广泛使用的技术&#xff0c;它能够识别图像中的边缘&#xff0c;这些边缘通常表示对象之间的边界或图像中的显著特征 void cv::Canny(const cv::M…

【lesson7】git的介绍及使用

文章目录 什么是gitgit的历史git使用在gitee上创建仓库git clone HTTPS地址git add .git add 文件名git commit “日志”git pushgit loggit rm 文件名git statusgit pull 什么是git git是版本控制器&#xff0c;那么什么是版本控制器呢&#xff1f; 下面讲个故事为大家讲解一…