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索引