/proc的相關知識
/proc 介紹
/proc
是一種偽檔案系統(也即虛擬檔案系統),儲存的是當前核心執行狀態的一系列特殊檔案,使用者可以透過這些檔案檢視有關係統硬體及當前正在執行程序的資訊,甚至可以透過更改其中某些檔案來改變核心的執行狀態。
簡單來講,/proc
目錄即儲存在系統記憶體中的資訊。
/proc
目錄中包含許多以數字命名的子目錄,這些數字表示系統當前正在執行程序的程序號(PID),裡面包含對應程序相關的多個資訊檔案。
/proc/self 介紹
/proc/self
表示當前程序目錄。前面說了透過/proc/$pid/
來獲取指定程序的資訊。如果某個程序想要獲取當前程序的系統資訊,就可以透過程序的pid來訪問/proc/$pid/
目錄。但是這個方法還需要獲取程序pid.為了更方便的獲取本程序的資訊,linux提供了 /proc/self/
目錄,這個目錄比較獨特,不同的程序訪問該目錄時獲得的資訊是不同的,內容等價於 /proc/本程序pid/
。程序可以透過訪問/proc/self/
目錄來獲取自己的系統資訊,而不用每次都獲取pid。
如何利用
cmdline
獲取當前啟動程序的完整命令
cat /proc/self/cmdline
以上命令返回的結果,就是啟動當前程序的命令
cwd
cwd 檔案是一個指向當前程序執行目錄的符號連結。可以透過檢視cwd檔案獲取目標指定程序環境的執行目錄
ls /proc/self/cwd
exe
獲取當前程序的可執行檔案的完整路徑
ls -al /proc/self/exe
environ
獲取當前程序的環境變數資訊
cat /proc/self/environ
maps
/proc/self/maps
的內容是當前程序的記憶體對映關係,可透過讀取該檔案來得到記憶體資料對映的地址。
欄位值依次為:記憶體區域--許可權--檔案在記憶體中的偏移量--裝置號--檔案索引節點--路徑
路徑中/usr/bin/cat
表示二進位制檔案
mem
/proc/self/mem
的內容是當前程序的記憶體對映關係,可透過讀取該檔案來得到記憶體資料對映的地址。但是注意該檔案不能直接讀取,因為檔案中存在著一些無法讀取的未被對映區域。所以要結合/proc/self/maps
中的偏移地址進行讀取。透過引數start和end及偏移地址值讀取內容。