0

当运行unshare命令 ( man 1 unshare) 时,它允许在与 shell 不同的命名空间中执行命令,为什么我仍然可以看到来自主机的所有进程?PID 命名空间不是设计不共享的吗?

谢谢。

4

1 回答 1

0

unshare仅取消共享您通过选项设置的命名空间。请同时特别查看 --mount-proc 选项(来自 unshare(1) 的引用):

在运行程序之前,将 proc 文件系统挂载到挂载点(默认为 /proc)。这在创建新的 PID 命名空间时很有用。它还意味着创建一个新的挂载命名空间,因为 /proc 挂载会扰乱系统上的现有程序。新的 proc 文件系统显式挂载为私有(使用 MS_PRIVATE|MS_REC)。

这很重要,因为ps命令从/procfs 读取 pid(请参阅 ps(1)):

这个 ps 通过读取 /proc 中的虚拟文件来工作。

另见 pid_namespaces(7):

在创建一个新的 PID 命名空间后,子进程 <...> 在 /proc 上挂载一个新的 procfs 实例很有用,这样 ps(1) 等工具才能正常工作。

于 2017-11-14T22:01:04.783 回答