環境変数を分離するための名前空間(プロセス、ユーザーなど)はありますか?
もしそうすればどうなりますかunshare
?複製されますか?プロセスが既存の変数を変更した場合はどうなりますか?
編集:Ubuntuを使用しています
ベストアンサー1
環境変数を分離するために名前空間は必要ありません。これはすでに各プロセスに対して分離されており、プライベートです。子プロセスの環境変数に対する変更は、親プロセスに伝播されません。
Unixの環境変数は、プロセスのアドレス空間に格納された文字列の束です。プロセスが分岐すると、そのサブプロセスはコピーとアドレス空間全体を「継承」し、プログラムが別のプログラムを実行するとき(そしてアドレス空間の内容全体を置き換えるとき)、引数としてシステムに明示的に渡される必要がenvp
あります。execve(2)
保存したい場合は呼び出してください。
プロセスを開始する場合空環境で次のように実行できます。
env - cmd ...
この場合にのみ呼び出されますexecve("/path/to/cmd", ["cmd", ..., NULL], [NULL])
。
または、次のような環境で実行してくださいFOO=bar
。
env - FOO=bar cmd ...
clone(2)
システムコール(、、、unshare(2)
)setns(2)
およびコマンドラインユーティリティに影響を与える名前空間は、unshare(1)
特別な方法で環境を考慮したり影響を与えたりしません。
注:これは一種の自然法則ではなく、Unixで動作する方法です。 plan9(名前空間の概念が始まったところですが、すべての名前空間はデフォルトで山すべてにファイル/システムがあるので、名前空間があります)環境/env
Unixとは異なり、デフォルトでインストールされるファイルシステムです。共有基本的に親と子供の間。