当运行unshare
命令(man 1 unshare
)时,它允许在与shell不同的命名空间中执行命令,为什么我仍然看到来自主机的所有进程?PID 命名空间不是设计上取消共享的吗?
谢谢。
unshare
仅取消共享通过选项设置的那些命名空间。请特别看看 --mount-proc 选项(引用自 unshare(1)):
在运行程序之前,在挂载点挂载 proc 文件系统(默认值为/proc)。 这在以下情况下很有用 创建新的 PID 命名空间。 这也意味着创建一个新的挂载命名空间,因为/proc 挂载会弄乱现有的 系统上的程序。 新的 proc 文件系统被显式挂载为私有(使用 MS_PRIVATE|MS_REC)。
这很重要ps
因为命令从 /proc
fs 读取 pid(参见 ps(1)):
此 ps 通过读取/proc 中的虚拟文件来工作。
另见pid_namespaces(7):
创建新的 PID 命名空间后,子项 <...>在/proc 上挂载一个新的 procfs 实例 所以 像 ps(1) 这样的工具可以正常工作。