getpriority

プロセスの優先度を取得する

構文

解説

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 では利用できませんので注意してください。