pid namespace

51 阅读2分钟

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这样的命令就可以了。