Linux进程概念—环境变量

  • 1.孤儿进程
  • 2.环境变量
    • 2.1常见环境变量
    • 2.2查看环境变量方法
    • 2.3在环境变量中添加
    • 2.4和环境变量相关的命令
    • 2.5环境变量的组织方式
    • 2.6命令行参数

hello,各位读者大大们你们好呀
系列专栏:【Linux的学习】
本篇内容:孤儿进程;环境变量
⬆⬆⬆⬆上一篇:string类(下)
作者简介:轩情吖,请多多指教(> •̀֊•́ ) ̖́-

1.孤儿进程

父进程退出,子进程会被OS自动领养(通过1号进程成为新的父进程),如果不领养会在后续子进程退出时,无人回收了

写一份代码如上

在makefile文件当中可以进行简写,$ @表示的是目标文件,也就是practice,$^表示的是依赖文件,也就是practice.c

在杀掉父进程后,子进程的父进程变成了1号进程

2.环境变量

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数
环境变量在系统当中通常具有全局特性

2.1常见环境变量

PATH:指定命令的搜索路径
HOME:指定用户的主工作目录
SHELL:当前shell,它的值通常为/bin/bash

2.2查看环境变量方法

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

2.3在环境变量中添加

export PATH=$PATH:xxx

可以看见,把当前路径添加到PATH中后,可以直接运行practice程序,本质上添加到环境变量中后,当使用practice时,系统会去PATH中的路径下找对应的practice,并且因为有全局特性1,不在需要./

2.4和环境变量相关的命令

①echo:显示某个环境变量值
②export:设置一个新的环境变量

val还有其他的一些特性,具体的后面再讲
③env:显示所有的环境变量

④unset:清除环境变量

⑤set:显示本地定义的shell变量和环境变量
这个也有所涉及到后面的知识,后面再讲

2.5环境变量的组织方式

不知道大家有没有见过main函数的参数
int main(int argc,char* argv[],char* envp[])
每个程序都会收到一张环境变量表,环境变量表就是一个字符指针数组,每个指针指向一个以‘\0’结尾的环境字符串,其中envp就是一个字符指针数组,就是环境变量表


可以看到,把环境变量全部打印出来
还有一个方法是使用environ



libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以说在使用时要用extern声明
在Linux中,把可执行程序,拷贝到系统默认路径下,让我们直接访问的方式相当于Linux下软件的安装。

也可以使用getenv系统调用来获取环境变量

环境变量本质就是一个内存级的一张表,这张表由用户登录系统的时候,进行给特定用户形成属于自己的环境变量表
每个环境变量都有自己的特定的应用场景
每一个元素都是kv的(有自己的名字和内容)
环境变量对应的数据从系统的相关配置文件中读取进来的(.bash_profile .bashrc)
环境变量通常是具有全局属性的,可以被子进程继承下去的
如果没有export,命令行定义的就是本地变量,只在shell内部有效,不会被子进程继承,使用export的目的是为了把变量放进环境变量表中,但是不管本地变量还是环境变量都被shell记录了下来


可以看到在命令行定义的变量使用env查看时并没有显示,但是使用export声明后,就能查看到在环境变量表中

2.6命令行参数


argv本质上也是一个表,由bash制作这个表,实际上就是为了方便使用命令行参数
举一个栗子来更好地理解它:


其本质上命令行上输入的就是一串字符串,一个是可执行程序,后面的就是参数选项,平常我们使用的命令以及命令选项都是这样实现的。

环境变量的知识大概就讲到这里啦,博主后续会继续更新更多Linux的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!