pid namespace 所隔离的资源?
进程号。pid namespace 使同一个进程在不同的 pid namespace 之中具有不同的进程号。
实验
pid namespace 进程号 隔离实验
目的:
验证pid namespace 隔离进程号的作用
步骤:
1:创建一个新的pid namespace
unshare --fork --pid /bin/bash
2:查看当前进程的进程号
echo $$
pid namespace 收养孤儿进程实验
目的
验证 pid namespace 1号进程 收养孤儿进程的行为
步骤
1:查看当前的进程id
echo $$
2:创建一个新的pid namespace
unshare --fork --pid /bin/bash
3:打开一个新的终端2,查看 之前进程id的父子结构
pstree 进程id
4:终端1执行 /bin/bash创建一个新进程
/bin/bash
5:终端1执行sleep 3000创建一个新进程
sleep 3000
6:终端2查看最初进程号的 父子关系
pstree进程id
7:终端2杀死 第四步创建的进程
kill 进程id
8:终端2查看最初进程号的 父子关系
pstree 进程id
问题:
1: 新的 pid namespace 之中的1号进程,是否会收养 同一个pid namespace 之中的孤儿进程?
会的
2: pid namespace之中的1号进程 死去后,相同pid namespace之中的进程会如何?
内核会向 相同 namespace 之中的进程发送 kill 信号
3: unshare --fork --pid /bin/bash创建一个新的pid namespace,但是使用top之类的工具,显示的还是原来的进程信息。
top工具 读取的是 /proc目录下的信息,因为只是创建了 新的pid namespace,并没有创建新的mnt namespace,所以显示的进程信息 还是原来的进程信息
4: unshare --fork --pid -m /bin/bash创建新的pid namespace的同时,又创建了mnt namespace,为什么top命令还是显示的是原来的进程信息?
新的mnt namespace复制了原来的mnt namespace之中的信息,所以还是原来的数据。
需要重新挂载一下proc文件系统
执行 unshare --for --pid --mount-proc -m /bin/bash这样的命令就可以了。