我们都知道在Docker container里运行ps命令是看不到宿主机上运行的进程的。这种程度的隔离是通过什么方式实现的呢?
答案是Linux内部命令unshare。
我第一次执行命令unshare /bin/bash,然后再执行ps -ef --forest,发现通过unshare命令fork的新的进程里,因为其pid和父进程pid的namespace相同,因此ps -ef的结果和在父进程上执行相同。
下面我还是执行unshare,不过加上参数:
unshare --pid --mount-proc --fork /bin/bash
这样从namespace级别进行了父进程和fork出的子进程的隔离。现在我在子进程里再执行ps -ef --forest, 从结果能发现确实只能看到子进程本身的bash和ps进程了。