【问题标题】:Reading global environment variables读取全局环境变量
【发布时间】:2018-04-20 15:57:58
【问题描述】:

我有一个由另一个程序的 execve() 创建的进程,并将一组特定的环境传递给它。但是,我需要读取一个全局环境变量,该变量可能由用户根据某些方面设置,也可能不设置。例如,调用 execve() 时设置了 $PATH,但如果用户 stes $LOWMEM=1 (export LOWMEM=1) 在程序执行之前,程序不会使malloc() 调用大于1KB

当我从程序调用getenv("LOWMEM") 时,它返回NULL,因为我在/etc/enviromentecho $LOWMWM 中添加了LOWMEM=1,将值显示为1。但我没有看到LOWMEM 条目/proc/<PID>/environ。而我在将条目添加到/etc/environment 后重新启动了系统。

如果不从父进程显式传递,就不能从特定环境下运行的进程读取全局环境吗?

【问题讨论】:

  • 全球环境不存在。每个过程都有自己的环境。默认情况下,进程继承其父环境的副本,但execve() 可以覆盖它。
  • 如何在shell中设置LOWMEM环境变量?假设一个 POSIX-ish shell,你必须使用 export LOWMEM=1 创建一个环境变量;仅在某处使用 LOWMEM=1 而不使用 export LOWMEM 不会创建环境变量。 (如果您更喜欢贝壳,那么您需要setenv LOWMEM 1 而不仅仅是set LOWMEM 1。)将LOWMEM 添加到/etc/environment 并重新启动似乎有点矫枉过正——这不是一种很好的经商方式。
  • LOWMWMLOWMEM 的拼写错误吗?

标签: c linux unix gnu


【解决方案1】:

您似乎很可能在使用execve 时清除了LOWMEM 条目。相反,最好为您想要的新变量调用setenv,无论是在父级还是在子级中,然后调用execv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2017-12-31
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多