すべてのアクティブなプロセスを検出するシェルスクリプトを作成し、ユーザーにスケジュールポリシーを出力したいのですが、結果は次のようになります。
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つの方法を見つけましたが、最適ではないかもしれませんが、彼らは仕事を成し遂げます。
_#! /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
_
この方法では、不要なファイルを作成する必要はありません。
ps -u|grep [0-9]|awk '{system("chrt -p" $2)} 2 > /dev/null
私はps
とawk
を使用して次のコマンドを考え出しました。これは、スケジューリングクラスの省略名を表示するというわずかな違いのみがある非常に類似した出力を提供します。次のマッピングが役立ちます。
コマンド:
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
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
を読み取るだけです。 。
コマンドが機能しない場合は、 より優れたシェルに切り替え して、再試行します。