$PATH環境変数はどのプロセスに属していますか? [閉鎖]

$PATH環境変数はどのプロセスに属していますか? [閉鎖]

環境変数はプロセスに属している必要があります。そうですか? $ PATHや$ HOMEなど、事実上の「グローバル」環境変数があるようです。どのプロセスに属していますか?

答え1

単一のPATH変数がなく、単一のプロセスに属していません。

すべてのプロセスに環境、これはキーと値のペアのリストで構成されています。キーは通常「変数」と命名されます。このexportコマンドは環境をリストします。プロセスは親プロセスから環境を継承します(UNIXでは、親プロセスが終了する前でも可能です。それはクールですか?)。

たとえば、どの変数も環境に入れることができますが、export birthday="Jan 23"HOMEやPATHなどの一部の変数はシェルで特別な意味を持ちます。他の変数はいくつかのプログラムで特別な意味を持ちます。たとえば、次を参照してください。環境部コマンドのマニュアルページからman

要約すると、すべてのプロセスにPATHとHOMEがあります。

答え2

環境は通常、以下を介して新しいプロセスに渡されます。実装するアレイが保存されているメモリ領域へのポインタを使用してくださいenvp

   int execve(const char *pathname, char *const argv[],
              char *const envp[]);

環境は通常継承されますが、基本的/etc/environmentに例えば(core $ PATH)を読み取って構築されます。 Bourne シェルは/etc/profileローカル設定ファイルなども読み込みます。

上記以外にも、POSIXの実装*読書が役に立ちます。

関連情報