【发布时间】:2018-04-20 15:57:58
【问题描述】:
我有一个由另一个程序的 execve() 创建的进程,并将一组特定的环境传递给它。但是,我需要读取一个全局环境变量,该变量可能由用户根据某些方面设置,也可能不设置。例如,调用 execve() 时设置了 $PATH,但如果用户 stes $LOWMEM=1 (export LOWMEM=1)
在程序执行之前,程序不会使malloc() 调用大于1KB。
当我从程序调用getenv("LOWMEM") 时,它返回NULL,因为我在/etc/enviroment 和echo $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并重新启动似乎有点矫枉过正——这不是一种很好的经商方式。 -
LOWMWM是LOWMEM的拼写错误吗?