2016-06-14 36 views
1

Windowsの各プロセスには独自の環境変数があります。しかし、私は、これらの環境変数を意味し、プロセスは、その環境変数を取得しないか、それはWindowsが提供する「グローバル環境変数」からそれらを取得しないことを確認していない:プロセスが親プロセスから環境変数を継承するのですか、それともWindowsからプロセスを取得しますか?

enter image description here

それともからそれらを継承しませんその親プロセス(最初の親プロセスだけがWindowsから環境変数を取得する)

+1

'smss.exe'プロセス(" windows session manager ")は非常に限られた環境変数を持っています。私は、これがカーネルによって開始される唯一のプロセスであり、格納されたシステム環境変数を読み込んで、他の初期実行プロセス( 'csrss.exe'や' wininit 'など)に渡すということを推測します。 exe')。ユーザ変数はおそらく 'userinit.exe'またはおそらく' winlogon.exe'によって読み込まれます。 –

答えて

2

Environment Variables (Windows)に記載されているように、子プロセスは親プロセスからすべての環境変数を継承します。さらに、親プロセスはCreateProcessを使用して子プロセスを作成し、それに新しい環境変数のセットを渡すことができます。

これ以外にも、コマンドプロセッサ(CMD)によって起動されるプログラムは、CMD環境変数を継承します。この変数は、質問に添付されたスクリーンショットにも記載されています。

+0

So ** cmd.exe **および** explorer.exe **は、 "グローバル環境変数"から環境変数を取得し、** cmd.exe **または** explorer内でプロセスが起動されると.exe **、プロセスはこれらの環境変数を継承しますか? – John

+1

@ジョン:AFAIK、詳細は記載されていないため、変更される可能性があります。しかし、Explorerがプロセスを起動するときに、グローバル環境変数のコピーがそれに与えられるようです。 'cmd.exe'は特別なことをしていないようです。 –

+1

訂正:CreateProcessを使用すると、子プロセスに異なる環境変数のセットを指定できます。これらは* extra *変数ではなく、現在の環境を置き換えずに置き換えます。 –

関連する問題