質問: ubuntu についてです。 特定サーバーの、すべてのプロセスで反映されていてほしい独自環境変数があったとします。これを実現するにあたって、/etc/profile に記述しておくと、プロセスの fork 木の中で少なくとも1回はその環境変数が反映された状態を実現できるのでは、と思いました。(そこから、例えば環境変数をクリアする処理が入っていたのならば、おそらく相応の理由があるのだとみなして今回は考えないことにします) この自分の理解は正しいでしょうか。(で、もし正しい場合は、「正しい」だけだと回答としてアレなので、サーバー初期化の際の fork 木がどうなっていてどこにログインシェルがいるのかなど教えていただきたく。。)
回答: NOです。 UNIX系OSのプロセスはfork&execモデルです。これはforkにより自身のプロセスのコピーを作成することと、execにより自身のプロセスを指定したプログラムに置き換えることとの2ステップによって成り立っています。その際の環境変数はexec前のものが引き継がれます。 その上で、fork&execはシェルだけに許されるものではなく、任意のプロセスが行えます。そのため、exec元のプロセスが環境変数を消してしまった場合は、execされたプログラムとしては消されずに残されていた環境変数しか得られません。