Linux Linux程序PID雜湊表

2021-09-22 09:22:41 字數 1372 閱讀 7426

linux系統中每個程序由乙個程序id標識,在核心中對應乙個task_struct結構的程序描述符,系統中所有程序的task_struct通過鍊錶鏈結在一起,在核心中,經常需要通過程序id來獲取程序描述符,最簡單的方法可以通過遍歷task_struct鍊錶並對比id的值來獲取,但這樣效率太低,尤其當系統中執行很多個程序的時候。

linux核心通過pid雜湊表來解決這一問題,能快速的通過程序id獲取到程序描述符。

pid雜湊表包含4個表,因為程序描述符包含了表示不同型別pid的字段,每種型別的pid需要自己的雜湊表。

enum

pid_type

;

檢視/proc/pid/status可以看到一些程序的當前狀態:

shell@android:/proc/19280/task $ cat 19282/status                              

name: gc

state: s (sleeping)

tgid: 19280pid: 19282ppid: 17974tracerpid: 0uid: 10043 10043 10043 10043gid: 10043 10043 10043 10043fdsize: 256groups: 1006 1007 1015 1028 3001 3002 3003vmpeak: 483560kb

vmsize: 481500kb

vmlck: 0kb

vmpin: 0kb

vmhwm: 44940kb

vmrss: 29684kb

vmdata: 24848kb

vmstk: 136kb

vmexe: 8kb

vmlib: 29096kb

vmpte: 160kb

vmswap: 0kb

threads: 19sigq: 0/5987sigpnd: 0000000000000000shdpnd: 0000000000000000sigblk: 0000000000001204sigign: 0000000000000000sigcgt: 00000002000094e8

cpus_allowed: 3cpus_allowed_list: 0-1voluntary_ctxt_switches: 5nonvoluntary_ctxt_switches: 33

分類: 

linux

demoblog

linux linux程序指令

1.linux有哪些程序 linux下的主要程序狀態有 2.1 r task running 可執行狀態 通過將程序的task struct結構放到cpu的可執行佇列中,使程序變成r態。只有處在該狀態的程序才有可能被程序排程器選中在cpu上執行 2.2 s task interruptible 可中...

程序標識(pid)

每個linux下的程序都會分配唯一乙個程序標識 pid pid是個16位元的整數。pid就是process id type 的縮寫,c程式用到程序標識時,通常會用pid t來宣告程序標識變數,通過getpid 來獲得程序pid。通過getppid來獲得父程序的pid。讓我們來看一下pid的定義 開啟...

linux linux程序記憶體分析

在產品的開發中,通過對當前系統消耗記憶體總量的統計,可以對產品所需記憶體總量進行精確的評估,從而選擇合適的記憶體晶元與大小,降低產品的成本。在遇到記憶體洩露類問題時,經常會對此束手無策,本文通過對proc下程序相關的檔案進行分析,精確評估系統消耗記憶體的大小,還可以對記憶體洩露類問題的解決提供一種定...