linux下ss命令源碼學習(一):進程名、pid的獲取及存儲

linux ss源碼學習

進程名、pid的獲取及存儲

當執行ss -p命令時,會返回進程的名稱、pid信息,接下來就分析一下該信息是如何獲取及存儲的

獲取

1、
這裏寫圖片描述

當指定p參數時, 會將全局變量show_users進行++操作,之後會執行user_ent_hash_build()函數。

2、
這裏寫圖片描述

該函數第一步首先獲取環境變量PROC_ROOT的值,若爲空,則默認路徑爲/proc/目錄

3、
這裏寫圖片描述

之後讀取/proc/pid/stat文件,其中pid指代的是進程的pid

4、
這裏寫圖片描述

讀取文件中括號部分的內容,該內容即爲進程名稱

存儲

1、
這裏寫圖片描述

採用的是hash存儲的方式,以進程的socket索引進行地址
尋址,存儲進程名、pid等信息,如果地址衝突,則使用鏈表的形式進行解決

使用

這裏寫圖片描述

若指定了-P參數,則show_users爲1,則進入find_users函數從hash表中獲取數據

這裏寫圖片描述

首先通過socket索引獲取hash地址,接着判斷獲取數據

socket索引的獲取方式

這裏寫圖片描述

進入/proc/進程號/fd目錄,進行掃描

這裏寫圖片描述

黃線部分即爲socket索引
發佈了107 篇原創文章 · 獲贊 98 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章