web-dev-qa-db-ja.com

スケジューリングポリシーとアクティブプロセスの優先順位を見つける方法は?

すべてのアクティブなプロセスを検出するシェルスクリプトを作成し、ユーザーにスケジュールポリシーを出力したいのですが、結果は次のようになります。

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およびchrtコマンドを使用する単一のプロセスに対してのみです。

2
Spyros

私はそれを行うための2つの方法を見つけましたが、最適ではないかもしれませんが、彼らは仕事を成し遂げます。

  1. _#! /bin/bash ps -u |grep [0-9]|awk '{print $2}' > test.txt cat test.txt |while read line do chrt -p $line 2 > /dev/null done_

    2。

この方法では、不要なファイルを作成する必要はありません。

ps -u|grep [0-9]|awk '{system("chrt -p" $2)} 2 > /dev/null

1
Spyros

私はpsawkを使用して次のコマンドを考え出しました。これは、スケジューリングクラスの省略名を表示するというわずかな違いのみがある非常に類似した出力を提供します。次のマッピングが役立ちます。

  • [〜#〜] ts [〜#〜] is 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
1
Karim Manaouil

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

したがって、ここから、ジャックがFIFOで実行され、pulseaudioがラウンドロビンで実行されていることがわかります。これらのプロセスは、-Tが指定されていない場合、TSを読み取るだけです。 。

コマンドが機能しない場合は、 より優れたシェルに切り替え して、再試行します。

0