inux系统里面是不是只能有一个PID为1的进程(init进程,创始进程)
lsns:查看当前bash的那么namespace
重新启动一个namespace
unshare --fork --pid --mount-proc bash
新的进程后旧的进程会共享usr uts net ipc,但是它们的mnt 和pid 是不一样的,文件系统上是隔离和PID不一样
linux的namespace机制
进程1 进程2 进程1 进程2
namespace1 namespace2
linux内核
硬件
linux下namesapce机制提供一种资源隔离和虚拟化的特性,PID IPC,Network等系统资源不再是全局的,而是属于某个特定的Namespace
每个Namespace下的资源对于其他Namespace下的资源都是不可见的。
因此在操作系统层面上看,就会出现多个相同PID进程。
系统中可以同时存在两个甚至多个进程为0、1、2的进程,由于属于不同的Namespace,所以他们之间并不冲突。
而在用户层面上看到用户自己Namespace下的资源,例如使用ps命令只能列出自己Namespace下的进程。
这样每个Namespace看上去就像一个单独额linux系统
namespace 系统调用参数 隔离内容 内核版本
UTS CLONE_NEWUTS 主机名和域名 2.6.19
IPC CLONE_NEWIPC 信号量、消息队列和共享内存 2.6.19
PID CLONE_NEWPID 进程编号 2.6.24
Network CLONE_NEWNET 网络设备、网络栈、端口 2.6.29
Mount CLONE_NEWNS 挂载点(文件系统) 2.6.19
User CLONE_NEWUSER 用户和用户组 3.8
namespace还是有层级的概念:高级别的namespace可以被低级别的namespace看到
高级别的进程有多个PID。
比如说系统默认namespace镜子为level0,在level0下创建了一个新的namespace叫做level1,在level中运行了一个进程。
在level中这个进程的PID为1 ,因为高级别的pid namespace需要被低级别的pid namespace看见,所以这个进程中在leve0中为PID xxx
而xxx这个pid编号是按照leve0里的pid序列而分配