Linux ----环境变量
文章目录
进程的相关概念
- 竞争性:系统进程数目众多,而CPU 资源只有少量,甚至1个,所以进程之间具有竞争属性,为了高效的完成任务,就有了优先级
- 独立性:进程本身具有独立性,打开如何软件其他软件都不会受影响,需要独享资源,多个进程之间互不干扰
- 并行:多个进程再多个CPU 下分别,同时运行
- 并发:多个进程在一个CPU 下采用切换的方式,在一个时间段,多个进程都得以推进
环境变量
1 | |

这些命令,程序工……本质上都是可执行的文件
那么我们运行的时候,为何要./???
./可以帮助系统确认对应的程序在哪里
那么为什么系统的命令不需要带路径呢?
就是因为有环境变量
常见的环境变量
- PATH :指定命令的搜索路径
echo $PATH
显示某个环境变量值,在这个环境变量里面的可执行文件就可以直接运行执行

export
添加设置一个新的环境变量,这样我们自己写的myproc就可以直接运行了

将本地变量导成环境变量
set
显示本地定义的shell命令和环境变量
unset
清除环境变量

HOME
指定用户的主目录

env

显示所有的环境变量
- echo 显示某个环境变量的值
语言上面定义变量:本质上是在内存中开辟一个空间
环境变量本质上,OS 在内存/磁盘文件中给自己开辟的空间,用来保存系统相关的数据
环境变量
:变量名+变量内容(a,10)
系统上还有一种变量,是与本次登录有关的变量,只在本次登录有效,叫做本地变量
以空格为分隔符,每个都看作字符串,argv[0]=当前目录,程序的名字,最后一个元素指向NULL
argc决定有几个有效的元素
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eduG3KHr-1647503602595)(E:/Typora%E4%BA%91%E7%AC%94%E8%AE%B0%E6%9C%AC/picture/image-20220316130008181.png)]](https://img-blog.csdnimg.cn/35b10088e3824d339ef8408a291498c7.png)
获得环境变量
1 | |
函数如果没有参数,可以传参吗
是可以的,只不过获取数据的参数
常见的获得环境变量的方式
getenv(char *name)
1 | |
但是我们也很少获取环境变量
环境变量通常具有全局属性
父进程一直都不会变
父进程是命令行解释器
命令行上启动的进程,父进程都是bash(以及把系统的环境变量都导入的,,也可以继承给子进程),也是用fork启动的,
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LRgbApwk-1647503602596)(E:/Typora%E4%BA%91%E7%AC%94%E8%AE%B0%E6%9C%AC/picture/image-20220317152931780.png)]](https://img-blog.csdnimg.cn/4ba3795297a2457aac9bffeb720a1727.png)
my_env是一个本地变量
也可以被子进程继承
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oRO2hW5m-1647503602596)(E:/Typora%E4%BA%91%E7%AC%94%E8%AE%B0%E6%9C%AC/picture/image-20220317153254465.png)]](https://img-blog.csdnimg.cn/0070fecfa1f648cc9c22f9a8c85ed57c.png)
但是不是环境变量
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IzeFqVkn-1647503602597)(E:/Typora%E4%BA%91%E7%AC%94%E8%AE%B0%E6%9C%AC/picture/image-20220317153351778.png)]](https://img-blog.csdnimg.cn/9941130722cf4d4eaf735d7775e27b4e.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hEksAeOI-1647503602598)(E:/Typora%E4%BA%91%E7%AC%94%E8%AE%B0%E6%9C%AC/picture/image-20220317153715456.png)]](https://img-blog.csdnimg.cn/6746a9c74d794b33b91e4d7d12e730ee.png)
我们在命令行上写的也是环境变量(是父进程的)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pUCf5Wue-1647503602598)(E:/Typora%E4%BA%91%E7%AC%94%E8%AE%B0%E6%9C%AC/picture/image-20220317153807734.png)]](https://img-blog.csdnimg.cn/b6f3c4a075714fc38e5d9442a84fd716.png)
将这个变量导成环境变量,实际上是导给了bash的环境变量列表
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WdWNHsvz-1647503602598)(E:/Typora%E4%BA%91%E7%AC%94%E8%AE%B0%E6%9C%AC/picture/image-20220317153915422.png)]](https://img-blog.csdnimg.cn/3eff0b0f38214ff4a8e004dcce94e921.png)
导入之后就可以执行了
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2HuDkpUI-1647503602598)(E:/Typora%E4%BA%91%E7%AC%94%E8%AE%B0%E6%9C%AC/picture/image-20220317154021128.png)]](https://img-blog.csdnimg.cn/138f6b28690e42c8b1d5d05a45b255ce.png)
环境变量具有全局属性,本质上我们的环境变量可以被子进程继承下去,一个bash被设置那么所有的子进程都可以继承下去bash的内容
我们定义的本地变量就无法继承,只能自己用,自己bash使用这个变量,子进程无法使用这个本地变量