Linux

如何找到調度策略和活動程序的優先級?

  • December 19, 2020

我想製作一個 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

我已經設法做到了這一點,但僅適用於使用psandchrt命令的單個程序。

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 並重試。

我提出了以下命令psawk它給出了非常相似的輸出,只有很小的區別在於它顯示了調度類的縮寫名稱。以下映射可以幫助您:

  • TSSCHED_OTHER
  • RRSCHED_RR
  • FFSCHED_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

引用自:https://unix.stackexchange.com/questions/407497