/proc/[pid]/ns/net 包含指向 inode 的链接,该 inode 表示具有 PID [pid] 的进程的网络命名空间。线程有类似的东西吗?
我的用例是一个多线程应用程序,其中有一个主线程和一组工作线程。通用工作者 W 通过调用创建一个新的网络命名空间 N取消共享()(这使得 W 输入 N),将 veth 对的一端推入 N 并离开它(它使用指向根命名空间的 fd 来返回到该命名空间)。由于 W 返回根命名空间后 N 中没有进程,因此发生这种情况时 N 会被销毁,我不希望出现这种情况。
我想到的解决方案是在文件系统中的某个位置挂载一个到 N 的链接。这就是 iproute2 netns 所做的:安装到 /proc/[pid]/ns/net 的链接。就我而言,问题是 /proc/[pid]/ns/net 不断引用根命名空间,只有 W 更改命名空间,因此我无法使用它,我需要一个文件/其他东西来指向 a 的命名空间线。 Linux中有这样的东西吗?
答案1
有一个文件将线程与其网络名称空间关联起来:
/proc/[PID]/task/[TID]/ns/net
其中 TID 是线程 ID。这解决了我的问题。