Geo*_*lly 8 linux proc namespace
我不明白命名空间如何与/proc
. 我假设/proc
返回值基于查询它们的过程。
例如,让我们确定全局 PID 命名空间内当前进程的 PID:
$ bwrap --bind / / readlink /proc/self
6182
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义。然而,当我readlink
在它自己的 PID 命名空间中隔离时:
$ bwrap --bind / / --unshare-pid readlink /proc/self
6177
Run Code Online (Sandbox Code Playgroud)
我得到同样的结果!要获取命名空间内的 PID,我需要添加--proc /proc
:
$ bwrap --bind / / --unshare-pid --proc /proc readlink /proc/self
2
Run Code Online (Sandbox Code Playgroud)
但不应该/proc
总是考虑阅读过程的上下文吗?为什么procfs
需要额外的内容以及它与流程有何关系readlink
?
如果我不创建新的 PID 命名空间,则额外的内容procfs
没有任何区别:
$ bwrap --bind / / --proc /proc readlink /proc/self
6179
Run Code Online (Sandbox Code Playgroud)
这是命名空间的问题之一。和
\nbwrap --bind / / --unshare-pid readlink /proc/self\n
Run Code Online (Sandbox Code Playgroud)\n你\xe2\x80\x99创建了一个新的PID命名空间和一个新的挂载命名空间(因为bwrap
默认情况下是这样做的),但是你\xe2\x80\x99显式地将外部绑定挂载/
到该挂载命名空间中。结果是,在新的挂载命名空间内,/proc
与外部 \xe2\x80\x94 相同尝试
bwrap --bind / / --unshare-pid ps -ef\n
Run Code Online (Sandbox Code Playgroud)\n这里的关键功能描述如下man pid_namespaces
:
\n\n文件系统仅
\n/proc
显示(在目录中)在执行 mount 的/proc/[pid]
进程的 PID 命名空间中可见的进程,即使是从其他命名空间中的进程查看文件系统也是如此。/proc
(强调我的)。您可以在此处看到/proc
记住适当的 PID 命名空间。
因此,通过执行挂载的 PID 命名空间的眼睛来readlink
查看,而不是通过其自己的 PID 命名空间。/proc
在新的 PID 命名空间中的分叉内重新添加--proc=/proc
挂载,因此其内容反映新的 PID 命名空间。/proc
bwrap