Freebsd
FreeBSD下的頂級程序狀態欄
當以互動方式執行 top 時,我可以在 state 列中看到各種單詞:
- nanslp, biord, select, uwait, lockf, pause, kqread, piperd, sbwait …
有些像 nanslp 或 kqread 是不言自明的,有些則不是。
試過先生手冊頁:
STATE 是目前狀態(“START”、“RUN”(在 SMP 系統上顯示為“CPUn”)、“SLEEP”、“STOP”、“ZOMB”、“WAIT”、“LOCK”之一或程序等待),C 是正在執行程序的處理器編號(僅在 SMP 系統上可見)
試過的搜尋引擎:
我在哪裡可以獲得 FreeBSD 9 下可能的程序狀態及其含義的完整列表?
top
在手冊頁中更進一步的是:If a process is in the "SLEEP" or "LOCK" state, the state column will report the name of the event or lock on which the process is waiting. Lock names are prefixed with an asterisk "*" while sleep events are not
所以基本上,所有非大寫的“STATE”,非以星號為前綴的都是睡眠事件名稱。
這些標籤是在 FreeBSD 核心中設置的,所以你應該去那裡找到它們的含義。遺憾的是沒有很好的總結,因為事件名稱是由
sleep
呼叫設置的。例如,函式
/usr/src/sys/kern/sys_pipe.c
中的某處pipe_read
:
error = msleep(rpipe, PIPE_MTX(rpipe), PRIBIO | PCATCH, "piperd", 0);
或者在
/usr/src/sys/kern/sys_pipe.c
函式中kern_nanosleep
:
error = tsleep(&nanowait, PWAIT | PCATCH, "nanslp", tvtohz(&tv));