我想了解的是子进程从其父进程中继承导出变量的位置
我想了解的是子进程从哪里继承导出的环境变量?我理解exec()系统调用覆盖了由fork()创建的环境变量.但是,如果所有环境变量都被覆盖,exec()如何使导出的环境变量包含在新创建的子进程中?我最好的猜测是导出的环境变量在某种程度上被排除在被覆盖之外.但我无法证实
编辑我的问题,使我的问题更清楚地与我的要求。
发布于 2018-12-18 20:50:20
没有全局环境变量。它们是从父母传给孩子的。
fork不改变环境变量。exec后缀的e不会改变环境变量。exec的e后缀覆盖环境变量。除了使用e post固定的execs来改变环境之外,您还可以这样做:
int pid = fork() //new process with same environment variables
if (pid == 0) {
putenv //add some environment variables
unsetenv //remove some environment variables
exec //replace program. non e version of exec.
} …发布于 2018-12-18 20:24:57
int execve(const *filename,char *const argv[],char *const envp[]);- 男子汉
envp参数提供执行程序的所有环境变量。如果在envp中不传递任何值,则执行的程序将根本不会看到任何环境变量。
当您读取环境变量(getenv())时,总是从当前进程读取它。
无法设置系统范围内的环境变量。只能配置初始进程的环境,设置要传递给子进程的变量。
因此,在完全不同的环境下启动另一个程序是可能的。但是,最广泛、最常用的惯例是,使用您自己环境的副本启动程序。如果需要,可以修改特定的环境变量。
一个例外是su --login和sudo --login ...,它们干净地重置环境。忽略这些命令的--login选项可以传递一些环境变量.这有时会导致“意想不到的结果”。
https://unix.stackexchange.com/questions/489749
复制相似问题