【问题标题】:How to know if an environment variable was inherited from parent process?如何知道环境变量是否是从父进程继承的?
【发布时间】:2016-09-02 14:10:41
【问题描述】:

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

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

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

【问题讨论】:

  • 环境只是一组键值对。它不包含其他信息。

标签: c linux unix posix


【解决方案1】:

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

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

就 PID 101 而言,每个环境变量都来自其 父级(进程只有一个父级),它不关心也不知道它是来自 PID 100 还是从 PID 100 的父进程或导致 PID 101 的 exec 的其他进程。

【讨论】:

    【解决方案2】:

    可以对比一下101的环境和父亲原来的环境 /bin/env

    【讨论】:

      【解决方案3】:

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

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

      我知道它并非万无一失。 PID 和realpath 不保证变量是否被继承。但是,正在工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 2020-06-06
        • 2014-01-07
        相关资源
        最近更新 更多