首页 > 解决方案 > 为什么 setns mount 不适用于多线程进程?

问题描述

我目前正在寻找答案,为什么 setns() into mount namespace 不适用于多线程进程。我理解为什么 setns() 不允许用户命名空间,这在手册页中明确指出:

多线程进程可能不会使用 setns() 更改用户命名空间。不允许使用 setns() 重新进入调用者的当前用户命名空间。这可以防止已丢弃功能的调用者通过调用 setns() 重新获得这些功能。

但是,对于挂载命名空间没有解释:

如果一个进程是多线程的,它可能不会与新的挂载命名空间重新关联。

我尝试了Calling setns from Go中的以下 GO 代码为 mnt 命名空间返回 EINVAL并生成相同的输出。另外,为什么网络名称空间或任何其他名称空间可以让 setns() 正常工作?

我的消息来源是:

标签: multithreadinggokernelsystem-callsmount

解决方案


推荐阅读