进程切换与环境变量(一)

目录

一、进程切换

前提引入 

二、环境变量

1.查看环境变量的方法

2.什么是环境变量

3.一些常见的环境变量

1.PATH

2.HOME

3.USER

4.SHELL

4.和环境变量有关的指令

1.echo:

2.export

3. unset:

4.env

5.set

5.知识补充命令行参数 

为什么要有命令行参数 ?

6.环境变量也会被传入main函数

7.环境变量可被子进程继承并且有全局属性

注意点


一、进程切换

并发:多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发

前提引入 

为什么函数返回值会被外部拿到呢?因为通过CPU寄存器存放临时变量

return a(假设数值为10)   即  mov eax 10

系统如何的得知我们的进程当前执行到哪行代码了?

系统通过CPU中的寄存器eip(或者被称之为程序计数器pc),记录当前进程正在执行指令的下一行指令的地址

寄存器有很多,例如

通用寄存器:eax,ebx,ecx,edx

栈帧有关的寄存器 ebp,esp,eip

状态寄存器 status

为了提高效率,进程会将高频数据放入寄存器中

cpu内的寄存器里面保存的是 进程相关的数据(访问或者修改)

这些寄存器里保存的进程的临时数据被称为 进程的上下文

进程从cpu上离开的时候要将自己的上下文数据保存好带走,以便于未来再被调度的时候恢复上下文,保存的目的,未来都是为了恢复

进程在被切换的过程中不断在保存自身的上下文和将自身上下文恢复到cpu的过程中重复。

这些内容可以被保存在进程的pcb中 

二、环境变量

1.查看环境变量的方法

echo $NAME //NAME:你的环境变量名称 

2.什么是环境变量

环境变量是一组name=vaule形式的变量,不同的用户具有不同的环境变量,环境变量具有全局性

它的作用是帮助系统“认识你是谁”

3.一些常见的环境变量

1.PATH

 PATH : 指定命令的搜索路径

我们使用ls pwd等指令不需要带路径是因为系统默认会到PATH中的路径里面去寻找

修改(等号左右不带空格)

覆盖:PATH=路径     例如 PATH=/home/myh/test

添加:PATH=$PATH:路径    例如PATH=$PATH:/home/myh/test

2.HOME

因为有这个环境变量,在我们登录时,默认会处在我们的家目录下 

3.USER

用户是谁

4.SHELL

查看当前在哪个shell中

4.和环境变量有关的指令

1.echo:

显示某个环境变量值

2.export

设置一个新的环境变量

在命令行直接导入的name=vaule被称为本地变量,bash自己使用

我们要在前面添加export

例如export myh=0

3. unset:

清除环境变量

unset name   

例如unset myh

4.env

显示所有环境变量

再介绍一些环境变量 

HISTSIZE:系统能保存的历史命令条数

SSH_TTY:终端设备文件是谁

如图左右是两个终端,右边的终端文件为/dev/pts/25,在左边终端指定路径,字符就可以被输入到右边的终端中 

PWD:当前程序所在路径

OLDPWD:上次处在的目录

我们还可以通过系统调用接口来获取环境变量

在代码中getenv(环境变量名)即可 

5.set

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

5.知识补充命令行参数 

第一个是指令+选项的数目,第二个参数是一个指针数组,每一个指针指向一个字符串 ,以NULL结尾

 通过实验,我们可以看到

我们的指令会被存入第一个位置,后续的选项会被存入后面的位置 

因此我们可以通过if else语句来实现不同的功能

为什么要有命令行参数 ?

为指令,工具,软件提供命令行选项的支持  

linux下大部分指令都是c写的,因此需要引入命令行参数来对指令提供选项支持 


6.环境变量也会被传入main函数

 

也会传入像argv一样的一个向量表 ,一样可以打印

7.环境变量可被子进程继承并且有全局属性

我们运行的进程都是子进程,bash本身在启动的时候会从操作系统的配置文件中读取环境变量信息 ,如果我们创建子进程,那么子进程就会基础父进程的环境变量

环境变量也是数据,默认情况下是父子共享的,但是如果子进程要修改数据,它不能影响到父进程,即要进行写时拷贝

注意点

bash并不是接收所有指令都会区创建子进程的

例如echo与cd

假设我们现在定义了一个本地变量,myh=0

我们echo myh,假设echo是bash的子进程,因为我们定义的是本地变量,因此echo的环境变量中是没有myh这个环境变量的

以及cd,每个进程都有当前的工作目录,如果cd创建子进程,那么修改的应该是子进程的路径,父进程的路径不会发生更改

因此我们有两批命令

1.常规命令--通过创建子进程完成的

2.内建命令--bash不创建子进程,而是由自己亲自执行,类似于bash调用了自己写的或者系统提供的函数

通过调用chdir,我们可以让程序自己改变自己的路径

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

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

相关文章

vite+vue3拍照上传到nodejs服务器

一:效果展示: 拍照效果 二:Nodejs后端接口代码: 三:前端完整代码:

数字化打破传统,引领企业跨界经营与行业生态盈利

在当今数字化时代,传统的赚货差思路正面临着巨大的挑战。然而,数字化的崛起为企业提供了突破传统束缚的机会,促使其转向跨界经营,并通过行业生态经营获取利润。 首先,数字化打破了传统赚货差思路的局限性。以往&…

科普文:分布式系统的架构设计模式

一、分布式架构基本概念 分布式架构是一种计算机系统设计方法,它将一个复杂的系统划分为多个自治的组件或节点,并通过网络进行通信和协作。每个组件或节点在功能上可以相互独立,但又能够通过消息传递或共享数据来实现协同工作。分布式架构主要…

用XDR的思路保护API安全

云计算飞速发展的今天,越来越多应用程序已经转为选择云原生架构,这就少不了Serverless、微服务、API等技术的协助。 但同时也有越来越多的企业认识到,一定程度的“API安全”在整体安全与合规态势中发挥着至关重要的作用。然而,对…

RockYou2024 发布史上最大密码凭证

参与 CTF 的每个人都至少使用过一次臭名昭著的rockyou.txt单词表,主要是为了执行密码破解活动。 该文件是一份包含1400 万个唯一密码的列表。 源自 2009 年的 RockYou 黑客攻击,创造了计算机安全历史。 多年来,“rockyou 系列”不断发展。…

C++ | Leetcode C++题解之第221题最大正方形

题目&#xff1a; 题解&#xff1a; class Solution { public:int maximalSquare(vector<vector<char>>& matrix) {if (matrix.size() 0 || matrix[0].size() 0) {return 0;}int maxSide 0;int rows matrix.size(), columns matrix[0].size();vector<…

WebStorm 2024 for Mac JavaScript前端开发工具

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff08;适合自己的M芯片版或Intel芯片版&#xff09;&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功3、打开访达&#xff0c;点击【文…

【源码下载】瓦房店农村电商大数据平台模板

技术详细实现可在评论区留言。 概述 用 echarts 和 jquery 实现的大屏模板效果。 部分代码展示&#xff0c;访问 dt.sim3d.cn 获取源码&#xff1a; (function($){$.extend({initMapChartPath : function(options){var defs {domId : ,mapName:china,mapCenter:["5…

FAO(脂肪酸β-氧化,Fatty acid beta-oxidation)应用实例

一、FAOBlue及其香豆素衍生物的吸收光谱和荧光光谱 在PBS缓冲液&#xff08;pH 7.4&#xff09;中&#xff0c;FAO代谢后释放的FAOBlue和香豆素衍生物的吸收光谱&#xff08;左&#xff09;、荧光光谱&#xff08;右&#xff09;。 FAOBlue经过FAO转化为香豆素衍生物后&#…

Adversarial Reweighting for Partial Domain Adaptation(论文阅读)

摘要 1、问题 通过实验发现如今的PDA方法在利用重新调整对齐分布来使适应特征对于源域数据的“噪声”权重&#xff0c;在很多挑战基准测试点上会导致域的负迁移。 2、目的 对抗性调整&#xff08;AR&#xff09;方法&#xff1a;对抗性学习源域数据的权重去对齐源域和目标域的…

自动化测试及生成测试报告

Linux安装Selenium进行自动化测试 首先需要安装python、Chrome&ChromeDirver ChromeDriver与Chrome对应版本 #查看chrome版本google-chrome --version或者在浏览器搜索chrome://version/ChromeDriver下载地址这里下载114版本 wget https://storage.googleapis.com/chrom…

(NeurIPS,2022)Knowledge-CLIP:使用知识图谱进行CLIP

文章目录 Contrastive Language-Image Pre-Training with Knowledge Graphs相关资料摘要引言回顾CLIPKnowledge-CLIP数据准备模型架构训练目标 Contrastive Language-Image Pre-Training with Knowledge Graphs 相关资料 论文&#xff1a;Contrastive Language-Image Pre-Tra…

Unity Text Mesh Pro 中英文混编自动换行问题

问题描述 使用TextMeshPro 输入中英文时&#xff0c;在一行内 输入中英文&#xff0c;当英文部分超过第一行剩余位置时&#xff0c;整个英文部分都会自动换行 问题截图&#xff1a; 期待截图&#xff1a; 问题说明 因为 TextMeshPro识别中文后会带换行符。 解决方案 修改…

C++ 信号量和锁的区别

网上关于信号量和锁的区别&#xff0c;写的比较官方晦涩难懂&#xff0c;对于这个知识点吸收难&#xff0c;通过示例&#xff0c;我们看到信号量&#xff0c;可以控制同一时刻的线程数量&#xff0c;就算同时开启很多线程&#xff0c;依然可以的达到线程数可控 #include <i…

sklearn(Python机器学习库)介绍

0 引言 Sklearn (全称 Scikit-Learn)是基于Python 编程语言的免费软件机器学习库。 Scikit-learn主要是用Python编写的,它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上,里面API 的设计非常好,所有对象的接口简单,很适合新手上路。 Scikit-learn与许多其他Python库很好地…

泰迪智能科技受邀北京物资学院共讨校企合作交流

为落实“访企拓岗促就业”专项行动工作要求&#xff0c;推动科研成果向实际应用转化&#xff0c;培养适应新时代需求的高素质人才&#xff0c;拓宽毕业生就业渠道&#xff0c;提升就业竞争力。7月1日&#xff0c;广东泰迪智能科技股份有限公司区域总监曹玉红到访北京物资学院开…

GenAl如何改变 DevOps 中的软件测试?

TestComplete 是一款自动化UI测试工具&#xff0c;这款工具目前在全球范围内被广泛应用于进行桌面、移动和Web应用的自动化测试。 TestComplete 集成了一种精心设计的自动化引擎&#xff0c;可以自动记录和回放用户的操作&#xff0c;方便用户进行UI&#xff08;用户界面&…

LLM大模型从入门到精通(2)--LLM模型的评估指标

LLM大模型建立完成之后&#xff0c;需要对大模型的性能进行评估。评估指标可以根据具体任务的不同而有所差异&#xff0c;以下是一些常见的评估指标&#xff1a; 1. 准确率&#xff08;Accuracy&#xff09;&#xff1a;模型预测正确的样本数占总样本数的比例。 2. 精确率&am…

【React】React18 Hooks 之 useContext

目录 useContext1、Provider和 useContext2、Provider 和Consumer3、Provider 嵌套4、React.createContext提供的Provider和class的contextType属性5、读、写Context&#xff08;1&#xff09;父组件修改Context&#xff08;2&#xff09;子组件修改Context 好书推荐 useContex…

Spring框架Mvc(2)

1.传递数组 代码示例 结果 2.集合参数存储并进行存储类似集合类 代码示例 postman进行测试 &#xff0c;测试结果 3.用Json来对其进行数据的传递 &#xff08;1&#xff09;Json是一个经常使用的用来表示对象的字符串 &#xff08;2&#xff09;Json字符串在字符串和对象…