Linux Namespace

命名空间是Linux中实现资源隔离的一种机制,它允许不同进程拥有独立的系统视图,如网络设备、进程ID、文件系统等。本文详细介绍了Linux的命名空间类型,包括cgroup、IPC、网络、挂载点、PID、时间及用户命名空间,并讨论了如何通过clone、setns、unshare等系统调用进行操作。此外,还提到了/proc/[pid]/ns目录的作用,以及如何通过bind挂载保持命名空间的持久性。
摘要由CSDN通过智能技术生成

命名空间是什么

命名空间提供了一套独立的系统资源,对这些系统资源的修改会影响同一个命名空间中的其他进程,但是不会影响到其他的命名空间中的进程。所以它的一个用途就是用来实现容器。

Linux下有以下几种Namespace

Flag:在API中指定命名空间的标志位

Page: manpage

Isolates:Namespace所分离的资源内容

Namespace

Flag

Page

Isolates

cgroup

CLONE_NEWCGROUP

cgroup_namespaces

cgroup root directory

IPC

CLONE_NEWIPC   

ipc_namespaces

SystemV IPC,POSIX message queue

Network

CLONE_NEWNET

network_namespaces

Network devices, stacks, port, etc

Mount     

CLONE_NEWNS

mount_namespaces

Mount points

PID

CLONE_NEWPID

pid_namespaces

Process PID

Time

CLONE_NEWTIME

time_namespaces

Boot & monotonic clocks

User

CLONE_NEWUSER

user_namespaces

User & group IDS

UTS

CLONE_UTS

uts_namespaces

Hostname & NIS domain name

 

/proc/[pid]/ns/ 目录

1)bind 挂载ns目录下的文件可以使命名空间一直存在,即使它对应的所有进程都已经停止。

bind 挂载

2)打开其中的文件也可以使命名空间存在,并且获得的文件描述符可以传给setns

3)/proc/sys/user目录展示了对创建各种命名空间数量的限制,如下:

 

限制数量是对用户来说的,也就是同一个命名空间下的所有用户能创建最多个命名空间数

 

相关的系统调用

1)clone

clone系统调用用来创建一个新的进程,相较于fork,clone提供更多对于进程的控制。比如父子进程是否使用相同的虚拟地址空间,文件描述符表等。

 

#define _GNU_SOURCE

#include <sched.h>

int clone(int (*fn)(void *), void *stack, int flags, void *arg, ...

                 /* pid_t *parent_tid, void *tls, pid_t *child_tid */ );

fn:进程执行函数,函数return时进程结束

stack:指定给子进程的栈空间,父子进程可以公用内存空间,但是栈空间不可以

flags(与namespace相关的):

(子进程在新的命名空间)

CLONE_NEWCGROUP

CLONE_NEWIPC

CLONE_NEWNET

CLONE_NEWNS

CLONE_NEWPID

CLONE_NEWUSER

CLONE_NEWUTS

如果添加了任意一个CLONE_NEW*标志位,则创建一个新的命名空间,并且创建的子进程就在这个新的Namespace中

 

2)setns

setns系统调用把调用的进程移动到现有的命名空间中去,如果需要看当前进程所在的命名空间可以在 /proc/[pid]/ns 下看到

 

数字表示命名空间id

 

3)unshare

unshare系统调用移动调用的进程到一个新的命名空间中去,如果加上CLONE_NEW*标志位的话会创建一个新的明明空间并把进程放到此命名空间

 

4)ioctl

 

 

参考: namespaces(7) - Linux manual page (man7.org)

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值