简介
Linux使用namespace进行系统资源的隔离,比如通过PID namespace用来隔离进程号
下图中,主机视角下的进程6,在他自己的namespace视角下,是进程1
namespace规则
-
进程可以分配给不同类型的不同名称空间
-
但是对于每个类型,它只能属于一个名称空间
-
默认情况下,进程与其父进程处于相同的名称空间中,它可以通过传递特定的标志在进程创建期间添加到新的名称空间,或者在进程运行期间通过调用 setns 系统调用添加到新的名称空间
-
理想情况下,只有同一名称空间中的进程才能共享名称空间隔离的资源。因此,资源是跨名称空间隔离的
namespace的种类
• Mount: 隔离文件系统挂载点
• UTS: 隔离主机名和域名信息
• IPC: 隔离进程间通信
• PID: 隔离进程的 ID
• Network: 隔离网络资源
• User: 隔离用户和用户组的 ID
lsns指令
可以列出namespace
lsns
NS TYPE NPROCS PID USER COMMAND
4026531835 cgroup 19 3956 zarathustra /lib/systemd/systemd --user
4026531836 pid 19 3956 zarathustra /lib/systemd/systemd --user
4026531837 user 19 3956 zarathustra /lib/systemd/systemd --user
4026531838 uts 19 3956 zarathustra /lib/systemd/systemd --user
4026531839 ipc 19 3956 zarathustra /lib/systemd/systemd --user
4026531840 mnt 19 3956 zarathustra /lib/systemd/systemd --user
4026531992 net 19 3956 zarathustra /lib/systemd/systemd --user
查看某一特定进程的namespace
切换到目录:/proc/pid/ns
下
/proc/2895/ns# ll
total 0
dr-x--x--x 2 root root 0 Apr 15 15:30 ./
dr-xr-xr-x 9 root root 0 Apr 15 06:52 ../
lrwxrwxrwx 1 root root 0 Apr 15 15:30 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 root root 0 Apr 15 15:30 ipc -> 'ipc:[4026532392]'
lrwxrwxrwx 1 root root 0 Apr 15 15:30 mnt -> 'mnt:[4026532390]'
lrwxrwxrwx 1 root root 0 Apr 15 15:30 net -> 'net:[4026532395]'
lrwxrwxrwx 1 root root 0 Apr 15 15:30 pid -> 'pid:[4026532393]'
lrwxrwxrwx 1 root root 0 Apr 15 15:44 pid_for_children -> 'pid:[4026532393]'
lrwxrwxrwx 1 root root 0 Apr 15 15:30 user -> 'user:[4026531837]'
lrwxrwxrwx 1 root root 0 Apr 15 15:30 uts -> 'uts:[4026532391]'
最后的一长串数字为 inode number