/ procはPID名前空間とどのようにやり取りしますか?

/ procはPID名前空間とどのようにやり取りしますか?

名前空間がそれとどのように関連しているか理解できません。戻り値はクエリプロセスに基づいていると/proc仮定します。/proc

たとえば、グローバルPID名前空間内で現在のプロセスのPIDを決定します。

$ bwrap --bind / / readlink /proc/self
6182

これは私にとって意味があります。ただし、readlinkそれを独自のPID名前空間に分離すると、次のようになります。

$ bwrap --bind / / --unshare-pid readlink /proc/self
6177

私は同じ結果を得る!名前空間内でPIDを取得するには、次のものを追加する必要があります--proc /proc

$ bwrap --bind / / --unshare-pid --proc /proc readlink /proc/self
2

/procしかし、読書プロセスの文脈を常に考慮する必要はありませんか?追加のコンテンツが必要なのはなぜですか?procfsプロセスとはどのような関係がありますかreadlink

新しいPID名前空間を作成しないと、追加のコンテンツにはprocfs違いはありません。

$ bwrap --bind / / --proc /proc readlink /proc/self
6179

答え1

これが名前空間の問題の1つです。そして

bwrap --bind / / --unshare-pid readlink /proc/self

新しいPIDネームスペースと新しいマウントネームスペースを作成しましたが(bwrapデフォルトではこれが行われるため)、/そのマウントネームスペースに外部バインディングを明示的にマウントします。その結果、新しいマウントネームスペースの内部は/proc外部と同じです。

bwrap --bind / / --unshare-pid ps -ef

主な機能はここに説明されています。存在するman pid_namespaces:

ファイルシステム/proc(ディレクトリにあります)は、/proc/[pid]プロセスのPID名前空間に表示されるプロセスのみを表示します。インストールの実行/proc他の名前空間のプロセスでファイルシステムを見る場合も同様です。

(強調)。あなたは見ることができます/procここで適切なPID名前空間を覚えておいてください。

readlinkしたがって、実行は独自のPID名前空間を介さずにmountのPID名前空間を介して表示されます。/proc

新しいPID名前空間のフォーク内にマウントを再追加して、--proc=/procそのコンテンツに新しいPID名前空間を反映させます。/procbwrap

関連情報