美文网首页
Linux 环境变量详解

Linux 环境变量详解

作者: 大富帅 | 来源:发表于2017-12-01 15:49 被阅读30次

问题: 用python去修改linux环境变量为何无效?

先简单解释一下环境变量。

环境变量可以看作是进程的一些元信息,脱离进程谈环境变量是没有意义的。在创建进程时,可以给新创建的进程设置一些环境变量,而进程一旦运行起来之后,就没有常规的手段可以从外部修改这个进程的环境变量了。一个进程的环境变量,可以通过以下命令查看(文件中的内容用 \0 分割,tr 命令将 \0 转化为换行,这样看得清楚):

cat /proc/$pid/environ | tr '\0' '\n'

Bash中新创建进程时,默认会将自己的环境变量、以及export的变量都设置为子进程的环境变量。因此,如果在一个Bash中执行:

export FOO=bar

那么这个Bash后续启动的新进程就都有FOO这个环境变量了。Bash如果以交互形式启动,或者以login shell的方式启动,启动时会执行/etc/profile中的命令。如果/etc/profile中export了一些变量,那么这个Bash后续创建的新进程就都有这些环境变量了。回到题主的问题。首先,“永久配置环境”,这句话本身是一个错误的说法。因为:
1、你无法修改所有已经在运行的程序的环境变量。
2、Linux下没有常规的方法可以使得所有新创建的进程都有一个预配置的环境变量。通常情况下,一个进程的环境变量由其父进程设置。如果父进程创建子进程时没有特别处理,一般子进程会直接继承父进程的环境变量。因此,如果要新创建的进程有某个特定的环境变量,那么这个变量一定是被父进程或者某个祖先进程设置的。
3、/etc/profile 只有Bash以及一些其他shell会读取,所以如果一个进程(以及其所有祖先进程)不是被bash启动的话,那么/etc/profile对他没有任何影响。(当然也有一些特例,有些非shell程序也会读取/etc/profile。)

下面解释一下,当你向/etc/profile中写入了export PATH和OMP_NUM_THREADS之后会有哪些效果:

  • 当你启动一个新的Bash进程时,这个Bash进程就会有这两个环境变量,并且它后续启动的进程也会有这两个环境变量。
  • 当你重启系统后,新开Bash进程,同上。
  • 重启系统后,由systemd启动的进程没有这两个环境变量。如果是其他init系统,则看情况了,有些init系统会读取/etc/profile,有些不会。
  • 当前python进程的环境变量没有变化,当前python进程后续启动的子进程也没有这两个环境变量,当前python进程的父进程(以及所有祖先进程)的环境变量也没有变化。

以上是对标题 “用python去修改linux环境变量为何无效?” 的回答。实际上,这个问题也同样是一个错误,或者说不完整的问题。因此,请不要追问 “如何才能生效” 的问题。如果题主理解了前面的回答,可以考虑一下:你期望哪些进程有PATH和OMP_NUM_THREADS这个环境变量?这些进程分别是怎样启动的(把所有祖先进程列出来)?如果某个进程没有这个环境变量,我们在针对具体情况再去讨论如何解决这个具体的问题。

问题链接:https://www.zhihu.com/question/55937152

相关文章

  • Ubuntu 环境变量配置详解

    Ubuntu 环境变量配置详解 使用Ubuntu 进行开发绕不开的就是环境变量的配置,由于Linux系统严格的权限...

  • LD_LIBRARY_PATH详解

    LD_LIBRARY_PATH详解 LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查...

  • 详解Java安装及环境变量配置(Windows&Linux)

    前面有一篇《环境变量详解》介绍了 Windows 和 Linux 系统下的环境变量,这里介绍一下常见的 Java ...

  • 环境变量

    Linux常见的环境变量 决定了shell将到哪些目录中寻找命令或程序: $PATH: 具体介绍参见后面详解。 当...

  • Linux 环境变量详解

    问题: 用python去修改linux环境变量为何无效? 先简单解释一下环境变量。 环境变量可以看作是进程的一些元...

  • Linux环境变量详解

    牛津大学(英国)校训:“上主是我的亮光。” 环境变量,对很多开发小朋友来讲,应该很是熟悉,在刚开始学习Java时,...

  • tomcat 环境变量说明

    linux 环境变量说明见此文linux环境变量说明 tomcat 环境变量说明:

  • Linux

    linux awk命令详解、linux awk命令Linux常用操作指令Linux netstat命令详解 awk...

  • Linux Java

    Linux配置Java环境变量 Reference [1]. Linux配置Java环境变量

  • 生信随手记2020-02-16:Linux环境变量

    Linux-常见环境变量及其作用Linux中环境变量的设置

网友评论

      本文标题:Linux 环境变量详解

      本文链接:https://www.haomeiwen.com/subject/lndwbxtx.html