Linux
如何找到調度策略和活動程序的優先級?
我想製作一個 shell 腳本來查找所有活動程序並向使用者列印調度策略。我希望結果是這樣的。
pid 3042's current scheduling policy: SCHED_OTHER pid 3042's current scheduling priority: 0 pid 3043's current scheduling policy: SCHED_OTHER pid 3043's current scheduling priority: 0 pid 3044's current scheduling policy: SCHED_OTHER pid 3044's current scheduling priority: 0
我已經設法做到了這一點,但僅適用於使用
ps
andchrt
命令的單個程序。
ps -c
可以,但大多數實際應用程序只更改其執行緒子集的調度策略。因此它們可能部分實時執行,但只會顯示為TS
. 要查看完整視圖,請通過添加以下內容查看各個執行緒-T
:eric ) ps -cT -p (pidof pulseaudio) PID SPID CLS PRI TTY TIME CMD 88821 88821 TS 30 ? 00:00:25 pulseaudio 88821 88822 RR 45 ? 00:00:22 alsa-sink-ALC25 88821 88823 RR 45 ? 00:00:00 alsa-source-ALC eric ) ps -cT -p (pidof jackdbus) PID SPID CLS PRI TTY TIME CMD 86902 86902 TS 19 ? 00:00:00 jackdbus 86902 109091 TS 19 ? 00:00:00 jackdbus 86902 109092 FF 50 ? 00:00:00 jackdbus 86902 109093 TS 19 ? 00:00:00 jackdbus
所以從這裡你可以看到 jack 正在 FIFO 中執行,而 pulseaudio 正在循環中執行。
TS
如果-T
未指定,這兩個程序都只是讀取。如果命令不起作用,請切換到更好的 shell 並重試。
我提出了以下命令
ps
,awk
它給出了非常相似的輸出,只有很小的區別在於它顯示了調度類的縮寫名稱。以下映射可以幫助您:
- TS為SCHED_OTHER
- RR是SCHED_RR
- FF是SCHED_FIFO
命令:
ps -e -o s,pid,cls,pri | grep ^R | awk -v sq="'" '{print "pid",$2,sq,"s current scheduling policy:",$3,"\npid",$2,sq,"s current priority:",$4}'
在我的主機上執行上述命令會得到以下輸出:
pid 8456 ' s current scheduling policy: TS pid 8456 ' s current priority: 19 pid 12552 ' s current scheduling policy: TS pid 12552 ' s current priority: 19
編輯
根據評論,以下命令使用
chrt
並假設活動程序是正在執行或可執行的程序給出了準確的輸出R
:ps -e -o s,pid | grep ^R | awk '{system("chrt -p " $2)}'
如果您想獲取所有程序(執行、睡眠、停止和殭屍)的輸出,您可以使用以下命令:
ls /proc | grep -e ^[0-9] | awk '{system("chrt -p " $0)}'|more