[LINUX]進程執行路徑

  • ①關於進程的執行路徑:進程的執行路徑本質上就是一個目錄文件,因此在一個運行期間,其實這個目錄文件對應的索引節點是肯定有引用計數的,目的就是在進程退出之前,內核不要真的去釋放這個目錄,刪除這個目錄。另一個角度可以理解爲,進程在打開的時候,實際上是打開了一個文件,這個文件在整個進程執行期間在內存索引節點的結構中,都有至少一個引用計數,目的是爲了保證進程執行目錄的有效性,當然,這裏僅僅只是打開,並不會上鎖,否則其他進程都無法訪問這個目錄了,這個索引節點號會被存儲在進程的u區的數據結構中,用chidr可以修改這個執行目錄,過程中也比較容易想到,就是先打開一個新的目錄,記錄下他的索引節點,計數+1,然後將之前的索引節點的引用計數減一,並且調用release來進行一次內存索引節點的釋放操作。如果引用計數不爲1的話,那麼就繼續存儲在內存的索引節點的hash表中。即可以像進程的執行目錄的一樣,進行修改的,chroot就是實現這個修改的方式,其原理其實和前面介紹的一致,本質上路徑都對應了一個內存的文件索引節點,所以修改這個路徑其實就是將這個索引節點替換成另外一個索引節點,只不過進程路徑最終都作用於相對路徑,對於根路徑的替換,有那麼一點難一理解,其實根路徑本質上也可以理解爲是一個相對路徑,只是他的第一個字符是’/'而已,這樣比較好理解。
  • ②傳遞性:由於fork實際上是複用父進程的所有屬性,因此前面說的這兩個路徑,其實都是從父進程傳遞下來的,如果修改了以後,不影響該進程的父進程,但是該進程的所有子進程都會繼承這個索引節點的更改,這個也是linuxfork的一個主要特點。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章