考虑在PID 100中运行的进程(它可以是普通的shell命令行)。因此,我们启动了一个程序(fork()/exec()
),它开始在PID 101中运行。现在我们的游乐场准备好了:
在PID 101中运行的程序导出一些环境变量,并在第二个程序中执行exec()
,然后,它开始在相同的PID 101(“环境”)中运行。
第二个程序如何知道某个环境变量是从父PID 100导出还是由在“重用”当前PID中运行的前任程序定义的?
答案 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
将确保变量是继承还是否。但是,正在发挥作用。