Linux
/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
這是命名空間的陷阱之一。和
bwrap --bind / / --unshare-pid readlink /proc/self
您已經創建了一個新的 PID 命名空間和一個新的掛載命名空間(因為
bwrap
預設情況下會這樣做),但是您明確地將外部綁定掛載/
到該掛載命名空間中。結果是,在新的掛載命名空間內部,/proc
與外部相同——嘗試bwrap --bind / / --unshare-pid ps -ef
此處的關鍵功能在以下內容中進行
man pid_namespaces
了描述:文件
/proc
系統(在目錄中)僅顯示在執行 mount/proc/[pid]
的程序的 PID 命名空間中可見的程序,即使文件系統是從其他命名空間中的程序查看的。/proc
(強調我的)。
所以通過執行
readlink
掛載/proc
的 PID 命名空間的眼睛,而不是通過它自己的 PID 命名空間。在新的 PID 命名空間的分叉內重新添加
--proc=/proc
掛載,因此其內容反映了新的 PID 命名空間。/proc``bwrap