2016-09-02 68 views
1

考慮在PID 100中運行的進程(它可以是普通的shell命令行)。因此,我們啓動一個程序(fork()/exec()),它開始在PID 101運行現在我們的操場已準備就緒:如何知道環境變量是否從父進程繼承?

在PID 101上運行的程序導出一些環境變量,並在第二個方案做一個exec(),然後它開始運行在相同的PID 101(「環境」)中。

第二個程序如何知道某個環境變量是從父PID 100中導出還是由在「重用」當前PID中運行的前驅程序定義的?

+4

環境只是一組鍵值對。它沒有其他信息。 – rustyx

回答

2

第二個程序如何知道某個環境變量是從父PID 100導出的 還是由在「重用」當前PID中運行的前驅程序定義的?

有沒有辦法區分(除非變量本身包含一些額外的信息 - 如前綴/後綴名稱或值等)。

至於,PID 101而言每一個環境變量是來自其母公司(進程只有一個父),它並不關心,也無法知道它是否從PID 100或從父母的PID 100或其他一些進程,導致高達PID的EXEC 101

0

可以比較的101環境的父親 /bin/env

0

似乎有沒有辦法做到這一點的原始環境,但是我用了以下解決方法:

Th第一個過程使用其realpath和PID導出變量。所以,當在同一個PID但不同的可執行文件路徑中時,我假設該變量是繼承的,當處於相同的PID和exe路徑中時,我假定它在創建變量的進程(程序)中。

我知道這不是可靠的。沒有保證PID和realpath將確保變量是否繼承或否。但是,正在工作。

相關問題