若要保留命名空間,請在哪個 /proc/PID 上建立綁定安裝點?

若要保留命名空間,請在哪個 /proc/PID 上建立綁定安裝點?

https://man7.org/linux/man-pages/man1/n.1.html:

預設情況下,只有當新命名空間至少有一個成員進程時,它才會存在。透過綁定安裝相應的 /proc/PID/ns/ns 類型文件,可以使命名空間持久化,即即使沒有成員進程,也可以固定存在。

綁定安裝來源的檔案路徑中使用了哪個 PID?創建命名空間時綁定掛載點的全部意義不就是命名空間不依賴 PID 的存在嗎?

如果我clone()使用該CLONE_NEWNET標誌建立網路命名空間,然後使用建立的新進程的 PID 建立綁定掛載,然後我終止該新進程,我會認為該/proc/PID/ns/net檔案消失了,但隨後該檔案/var/run/netns/<netns name>也會被刪除,網路命名空間不會持續存在。

答案1

在進程中運行的用戶態軟體無法在任何進程之外創建命名空間。

因此,您可以使用名稱空間建立進程(或其子進程之一)的 PI​​。

如果我使用 CLONE_NEWNET 標誌使用clone()創建一個網路命名空間,然後使用創建的新進程的PID創建一個綁定掛載,然後我殺死新進程,我會認為 /proc/PID/ns/ .net 文件消失,

讓我們在這裡使用帶有大引號的“文件”。虛擬檔案系統條目消失了,但是...

但 /var/run/netns/ 也會刪除

「刪除」是您對實際文件所做的操作,它在這裡不適用。 PID 將消失,但是您可以作為包含該 PID 的路徑下的某些虛擬檔案系統條目訪問的內容將變得無法存取方式。但:

但隨後 /var/run/netns/ 也會被刪除,網路命名空間不會持續存在。

是錯誤的,因為綁定安裝會添加對命名空間的核心內部引用,這樣它就不會被使用,因此會持續存在。

相關內容