共有解除の実行時の環境変数

共有解除の実行時の環境変数

環境変数を分離するための名前空間(プロセス、ユーザーなど)はありますか?

もしそうすればどうなりますか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(名前空間の概念が始まったところですが、すべての名前空間はデフォルトですべてにファイル/システムがあるので、名前空間があります)環境/envUnixとは異なり、デフォルトでインストールされるファイルシステムです。共有基本的に親と子供の間。

おすすめ記事