http://man7.org/linux/man-pages/man2/setns.2.html

int setns(int fd, int nstype);

Given a file descriptor referring to a namespace, reassociate the calling thread with that namespace.

当前线程切到fd对应的namespace,并且这个线程上下文中创建的新线程也在这个namespace。

  • fd:要加入的 namespace 的文件描述符,一般为 /proc/[pid]/ns 下某个对应类型 namespace 的软链接;

  • nstype:调用进程想要加入的 namesapce 的类型,其类型对应上文的表格中的 7 种 Namespace 类型:

    • 0:允许加入任何类型的 namespace;
    • CLONE_NEWCGROUPfd 必须指向一个 cgroup 的 namespace;
    • CLONE_NEWIPCfd 必须指向一个 IPC 的 namespace;
    • CLONE_NEWNETfd 必须指向一个 network 的 namespace;
    • CLONE_NEWNSfd 必须指向一个 mount 的 namespace;
    • CLONE_NEWPIDfd 必须指向一个 pid 的 namespace;
    • CLONE_NEWUSERfd 必须指向一个 user 的 namespace;
    • CLONE_NEWUTSfd 必须指向一个 UTS 的 namespace;

/proc 目录与 Namespace

除了 3 个 API 之外,还需要关注 /proc 目录。

自 Linux 3.8 开始,用户就可以在 /proc/[pid]/ns 目录下看到指向不同 namespace 号的文件,如:

1
2
3
4
5
6
7
8
9
10
# ls -l /proc/$$/ns
total 0
lrwxrwxrwx 1 root root 0 Apr 14 13:26 cgroup -> cgroup:[4026531835]
lrwxrwxrwx 1 root root 0 Apr 14 13:26 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 Apr 14 13:26 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 Apr 14 13:26 net -> net:[4026531993]
lrwxrwxrwx 1 root root 0 Apr 14 13:26 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 Apr 14 13:26 pid_for_children -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 Apr 14 13:26 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Apr 14 13:26 uts -> uts:[4026531838]

每一个进程在其对应的 /proc/[pid]/ns 下都有其 namespace 信息,该目录下每一个文件都是一个软链接,setns() 可以通过打开对应进程下的 ns 目录下的软链接文件来加入到对应的 namespace 中。

该目录下的每个软链接的内容其实是一串字符,由 namespace 类型和 inode number 组成:

1
2
# readlink /proc/$$/ns/uts
uts:[4026531838]

且满足以下几个条件:

  • 若几个进程中对应 namespace 软链接内容一致,则这几个进程同属于同一个 namespace;

  • 即使 namespace 中的进程全部终结了,只要其软链接文件一直处于 open 状态,则 namespace 将一直存在;

参考:https://zhengyinyong.com/introduction-to-linux-namespace.html

setns 切换命名空间,/proc 目录与 Namespace的更多相关文章

  1. Linux中/proc目录下文件详解

    转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...

  2. Linux下/proc目录简介

    文章转载至:http://blog.csdn.net/zdwzzu2006/article/details/7747977 1. /proc目录Linux 内核提供了一种通过 /proc 文件系统,在 ...

  3. Linux下/proc目录简介(转)

    1. /proc目录Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文 ...

  4. Linux系统的/proc目录

    1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机 制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它 ...

  5. Linux下/proc目录的作用

    文章是摘抄过来,方便自己查阅! 1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在 ...

  6. linux /proc目录

    1. /proc目录Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文 ...

  7. linux /proc目录说明(访问内核数据结构,修改内核设置)

    1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以 ...

  8. /proc 目录详细说明

    /proc路径详细: Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以 ...

  9. Linux下的/proc目录介绍

    proc被称为虚拟文件系统,它是一个控制中心,可以通过更改其中某些文件改变内核运行状态, 它也是内核提空给我们的查询中心,用户可以通过它查看系统硬件及当前运行的进程信息. Linux中许多工具的数据来 ...

随机推荐

  1. zynq开发板外设配置演示

    有幸得到米尔电子zynq系列开发板Z-turn Board试用体验,下面说说我这款zynq系列的Z-TURN板子外设配置.从Z-turn Board原理图上看,目前可以配置的FPGA管脚大概有100多 ...

  2. pandas-18 reindex用法

    pandas-18 reindex用法 pandas中的reindex方法可以为series和dataframe添加或者删除索引. 方法:serise.reindex().dataframe.rein ...

  3. 百度地图公交线路查询,并绘制到地图上并获取所有路径经纬度点(可供echarts 路径图使用)

    github地址 https://github.com/a1115040996/MyHTML/tree/gh-pages/BDMap 源代码 <!DOCTYPE html PUBLIC &quo ...

  4. 微信小程序引入外部组件 iView Weapp

    iview Weapp组件的使用方法: 1. 下载小程序组件库 (前提是你已经有了项目目录) 你可以直接去github把iView Weapp的代码下载下来,也可以用过npm来下载. github地址 ...

  5. JanusGraph安装graphexp

    准备:JanusGraph环境,graphexp源码,nginx 本文采用的环境:JanusGraph + cassandra + ES + GraphExp(cassandra 或者HBase作为后 ...

  6. 使用awk格式化输出文本

    注意:本文并不是一篇awk入门文章,而是偏重实例讲解 awk借鉴了c语法,因此awk在许多地方还保留有c语言的痕迹,比如printf语句:for,if的语法结构等 介绍 最简单地说,AWK 是一种用于 ...

  7. Httpd服务入门知识-正向代理和反向代理

    Httpd服务入门知识-正向代理和反向代理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正向代理和反向代理 启用反向代理 ProxyPass "/" &q ...

  8. PAT甲级1015题解——令人迷茫的翻译

    题目分析: 本题计算过程简单,但翻译令我迷茫:题意读清楚很重要(反正我是懵逼了)对于一个10进制的数,如果它是一个素数,把它转换成d进制,再将这个序列逆序排,这个逆序的d进制数的10进制表示如果也是素 ...

  9. python 验证码识别示例(三) 简单验证码识别

    今天介绍一个简单验证的识别. 主要是标准的格式,没有扭曲和变现.就用 pytesseract 去识别一下. 验证码地址:https://user.www.gov.cn/sso/verifyimg_ed ...

  10. 项目Beta冲刺(团队)——05.24(2/7)

    项目Beta冲刺(团队)--05.24(2/7) 格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺(团队) 团队名称:为了交项目干杯 作业目标:记录Beta敏捷冲刺第2 ...