为什么环境变量的数据可以被子进程所引用?

简介: 什么是“子进程”呢?就是说在我目前这个shell的情况下,去打开另一个新的shell,新的那个shell就是子进程。在一般的情况下,父进程的自定义变量是无法在子进程内使用的。但是通过export将变量变成环境变量后,就能够在子进程下面应用了。

什么是“子进程”呢?就是说在我目前这个shell的情况下,去打开另一个新的shell,新的那个shell就是子进程。在一般的情况下,父进程的自定义变量是无法在子进程内使用的。但是通过export将变量变成环境变量后,就能够在子进程下面应用了。

子进程仅会继承父进程的环境变量,子进程不会继承父进程的自定义变量,所以你原本bash中的自定义变量在进入了子进程后就会消失不见,一直到你离开子进程并回到原本的父进程后,这个变量才会又出现。

为什么环境变量的数据可以被子进程所引用呢?这是因为内存配置的关系。

理论上是这样的:

  •  当启动一个shell,操作系统会分配一记忆块给shell使用,此内存内的变量可让子进程取用;
  •  若在父进程利用export功能,可以让自定义变量的内容写到上述的记忆块当中(环境变量);
  •  当加载另一个shell时(即启动子进程,而离开原本的父进程了),子shell可以将父shell的环境变量所在的记忆块导入自己的环境变量块当中。

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

目录
相关文章
|
4月前
|
开发工具
环境变量,环境变量就是在操作系统中记录的一些关键性信息,以辅助系统运行,env,echo $PATH可以取出环境变量,全局变量的使用方法是定义,什么时候用,什么时候取,export MYNAME=it
环境变量,环境变量就是在操作系统中记录的一些关键性信息,以辅助系统运行,env,echo $PATH可以取出环境变量,全局变量的使用方法是定义,什么时候用,什么时候取,export MYNAME=it
|
6月前
|
Shell 编译器 Linux
【进程概念】环境变量PATH(结合代码,超极容易理解)
【进程概念】环境变量PATH(结合代码,超极容易理解)
|
6月前
|
Linux Shell 程序员
【进程控制】进程程序替换的原理以及exec函数族
【进程控制】进程程序替换的原理以及exec函数族
|
6月前
|
Linux Shell
Linux进程程序替换
Linux进程程序替换
Linux进程程序替换
|
6月前
|
Linux Shell
【Linux】进程与可执行程序的关系&&fork创建子进程&&写实拷贝的理解
【Linux】进程与可执行程序的关系&&fork创建子进程&&写实拷贝的理解
在 代码运行前加 strace 可以查看函数调度进程
在 代码运行前加 strace 可以查看函数调度进程
|
11月前
|
消息中间件 存储 开发者
解析进程复制:父子进程内存地址的神秘之处
解析进程复制:父子进程内存地址的神秘之处
84 0
|
网络协议 C# C++
关于 C#调用一个C/C++dll库运行时实现多个应用(静态变量区分) 的解决方法
关于 C#调用一个C/C++dll库运行时实现多个应用(静态变量区分) 的解决方法
关于 C#调用一个C/C++dll库运行时实现多个应用(静态变量区分) 的解决方法
|
存储 Shell
Shell 变量使用(环境变量、预定义变量、位置变量、自定义变量的区别)
Shell 变量使用(环境变量、预定义变量、位置变量、自定义变量的区别)
124 0
Qt通过QProcess启动进程并传递命令行参数
Qt通过QProcess启动进程并传递命令行参数
718 0