如何知道环境变量是否从父进程继承?

时间:2016-09-02 14:10:42

标签: c linux unix posix

考虑在PID 100中运行的进程(它可以是普通的shell命令行)。因此,我们启动了一个程序(fork()/exec()),它开始在PID 101中运行。现在我们的游乐场准备好了:

在PID 101中运行的程序导出一些环境变量,并在第二个程序中执行exec(),然后,它开始在相同的PID 101(“环境”)中运行。

第二个程序如何知道某个环境变量是从父PID 100导出还是由在“重用”当前PID中运行的前任程序定义的?

3 个答案:

答案 0 :(得分:2)

  

第二个程序如何知道某个环境变量是否已导出   来自父PID 100或由在" reused"中运行的前任程序定义。当前的PID?

没有办法区分(除非变量本身包含一些额外的信息 - 例如名称或值中的前缀/后缀等)。

就PID 101而言,每个环境变量都来自其(一个进程只有一个父进程),它并不关心,也无法知道它是否和&#em> #39;来自PID 100或来自PID 100的父级或其他一些过程直到PID 101的执行。

答案 1 :(得分:0)

您可以将101的环境与父亲的原始环境进行比较 /bin/env

答案 2 :(得分:0)

似乎没有办法做到这一点,但我使用了以下解决方法:

第一个进程导出一个带有realpath和PID的变量。因此,当处于相同的PID但不同的可执行路径时,我假设变量是继承的,当处于相同的PID和exe路径时,我假设它在创建变量的进程(程序)中。

我知道这不是一成不变的。没有保证PID和realpath将确保变量是继承还是否。但是,正在发挥作用。