比如常用的PATH环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还会到PATH中指定的路径去找。你可以在终端使用printenv PATH/echo $PATH查看当前PATH变量的值。
Linux系统下修改/自定义环境变量的方法通常分为两类:临时修改和永久性修改。下面分别介绍两种修改环境变量的方法。在这里以修改linux系统下的PATH环境变量(该环境变量保存了linux系统下所有可执行的程序的目录,linux系统执行某个可执行程序时,会以该环境变量的值(路径)去寻找可执行的程序名)为例进行举例。
PATH环境变量:该环境变量保存了linux系统下所有可执行的程序的目录,linux系统执行某个可执行程序时,会以该环境变量的值(路径)去寻找可执行的程序名,如果找到,则可以执行,如果找不到则会提示:无法找到××命令的错误。
1、临时修改/自定义环境变量
(1)临时自定义环境变量。
注意,系统默认的环境变量名称一般为大写,自定义的环境变量名称一般为小写,这样是为了避免命名上的冲突。
自定义临时环境变量时,有两种办法,一种是在terminal终端命令行直接定义,如下:
在这里插入图片描述
注意,此时自定义的my环境变量的作用范围仅限于当前shell(此时定义的my变量实际上是局部变量),在当前shell的子shell中无法寻找到该自定义变量。直接在其子shell中无法直接使用它。要想在其子shell中使用,必须用export命令来导出它为全局变量。
在这里插入图片描述
如上图所示,在定义my环境变量的子shell中无法识别到my环境变量。
当定义完my环境变量后,利用export命令将其转化为全局变量:
在这里插入图片描述
可以看到,使用export将my环境变量导出成全局变量后,在其子shell中也可以识别到。
**注意!!!!**使用export导出的my环境变量仅仅适用于当前的shell及其衍生shell中,退出当前shell后,my变量将不复存在。所以,这也是该方法被称为临时定义变量的原因。
自定义临时环境变量时,除了在terminal终端命令行直接定义外,还可以使用shell脚本的方法来事先定义好一个环境变量。并用source命令(或者 . 命令)(这么做是因为使用这两个命令是在当前shell中激活该脚本,不会产生子shell)在使用该变量的shell中激活该shell脚本即可。
首先肯定答案要问要说道线程进程区别进程作运行着程序总管理着系统配给资源线程则真运行CPU每线程context表(文)其包含寄存器使用情况我忘线程否独立堆栈
全局变量定进程堆栈定全局各线程都访问
首先肯定答案是,是。
要问为什么就要说道线程和进程的区别。进程作为运行着的程序的总和,他管理着系统分配给他的资源。而线程则是真正运行在CPU中的,每个线程有一个context表(上下文),其中包含寄存器的使用情况。我忘了线程是否有独立的堆栈了。
但是全局变量一定是在进程的堆栈中,一定是全局的,各个线程都可以访问的。
一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其
*** 作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的
全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另
一块区域。 - 程序结束后由系统释放。
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)