2015-10-11 26 views
2

我試圖瞭解這些標誌做什麼,我已經閱讀了描述並做了一些Google搜索,但我不知道如何測試這些標誌設置時子級和父級進程之間的差異。我可以運行哪些C函數或linux命令來幫助我查看這些標誌的影響?如何在C中測試CLONE_VM,CLONE_FS和CLONE_IO的影響?

+0

你在這裏想了解什麼? 'clone()'在容器和線程庫的實現之外幾乎沒有用處。 – duskwuff

+0

我正在使用CLONE並瞭解進程的名稱空間等。我已經能夠測試在子進程上設置其他標誌的效果,但是當我設置這些標誌時,我不知道如何看到父進程和子進程之間的差異。因此,例如當我使用CLONE_IO時,使用相同的IO上下文運行兩個進程的效果可見度如何?我試圖使用mount()來測試CLONE_FS,但我不確定我是否正確使用它。我要麼用C測試它們,要麼產生一個Linux shell並從終端測試它們。 – Connor

回答

0

CLONE_FS的一個很好的例子在我看來是一個替代答案:「爲什麼cd必須是內置的shell?」

通常當你運行一個進程時,他們只會共享某些信息,最顯着的是打開的文件描述符,但不是像「當前文件系統」那樣的東西。

這意味着,當cd作爲一個過程來實現調用chdir()會:

  1. 內開始一個新的進程
  2. 執行過程chdir()過程改變了目錄
  3. 該進程結束並將控制權返回給已在目錄中的父進程

    CLONE_FS(自Linux 2.0起) 如果設置了CLONE_FS,則調用方和子進程共享相同的文件系統信息。這包括 文件系統的根目錄,當前工作目錄和umask。由 調用進程或子進程調用chroot(2),chdir(2)或umask(2)的任何 也會影響其他 進程。

現在想象你有CLONE_FS集。請注意:「這包括...當前工作目錄...」。這意味着對chdir()的調用不僅會影響當前正在運行的進程,還會影響當前名稱空間中的進程。

所有我的描述是非常概括段落的最後一句:

如果沒有設置CLONE_FS,...調用執行chroot(2),CHDIR(2),或的umask( 2)後來由 之一執行的進程不影響其他進程。

+0

另外:這就是我所說的滯後:) – serverhorror

相關問題