当运行unshare
命令 ( man 1 unshare
) 时,它允许在与 shell 不同的命名空间中执行命令,为什么我仍然可以看到来自主机的所有进程?PID 命名空间不是设计不共享的吗?
谢谢。
当运行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) 等工具才能正常工作。