首先使用man檢視unshare幫助:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SNygjY2kzN0gTOmZTZwMWYwgTN0IzN0cDZyUDM2cTO18CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
run program with some namespaces unshared from parent
看下這幾個參數的功能。
–fork:
執行unshare的程序fork一個新的子程序,在子程序裡執行unshare傳入的參數
–pid:
不從父程序繼承pid命名空間。也就是說,在子程序内執行ps,無法看到父程序原有的程序。
–mount-proc: 這個先不解釋。
執行指令:
sudo unshare --fork --pid --mount-proc bash
注意到share提示符從vagrant變成了root。
此時在生成的子程序裡,whoami傳回root。
從父程序的指令ps -ejf不能看出這個父子程序關系:
因為子程序已經隔離了pid namespace,是以子程序的ps 無法看到父程序裡能看到的那些程序清單。
最後來看–mount-proc:
這個選項能確定建立了 PID 和 Mount namespace 後,自動挂載 /proc 檔案系統,無需我們手動執行 mount -t proc proc /proc 指令。
父程序10945對應的/proc/10945:
子程序的/proc檔案夾下面,看不到父程序pid對應的檔案夾:
這個unshare也是
Linux容器工作的基礎之一。