プロセスの優先度を取得する
getpriority
はプロセス、または、プロセスグループ、または、ユーザーのスケジューリング優先度を返します。
どのスケジューリング優先度を返すかは、引数 WHICH に指定しますが、
指定可能な値は
POSIX モジュールの定数
で、
PRIO_PROCESS
(プロセス), PRIO_PGRP
(プロセスグループ),
PRIO_USER
(ユーザー) のいずれかです。
そして、WHO には、WHICH の値に応じて、それぞれ、プロセス ID, プロセスグループ ID, ユーザー ID を指定します。
use POSIX qw(PRIO_PROCESS PRIO_PGRP PRIO_USER);
# このプロセスのプロセス ID
print getpriority( PRIO_PROCESS, $$ ), "\n";
# このプロセスのプロセスグループ ID (このプロセスのプロセス ID と同じ)
print getpriority( PRIO_PGRP, $$ ), "\n";
# このプロセスの実効ユーザー ID
print getpriority( PRIO_USER, $> ), "\n";
getpriority
が返すスケジューリング優先度の値は OS に依存しますが、
-20 ~ 19 の範囲の整数を返すようです。
値が小さければ小さいほど優先度が高いことを表します。
このスクリプトを sample.pl として保存し、Ubuntu で試したところ、次のような結果が得られました。
$ perl sample.pl
0
0
-11
この優先度はいわゆる「nice 値」と呼ばれ、nice
コマンドで制御可能です。
次の例は nice
コマンドでスケジューリング優先度を 10 だけ低くしています。
つまり nice 値を 10 だけ上げています。
$ nice -n 10 perl sample.pl
10
10
-11
Perl スクリプトで nice 値をセットしたい場合は、setpriority
を使ってください。
getpriority
は Windows では利用できませんので注意してください。