RTPRIO(1)

名称
rtprio, idprio - リアルタイム/アイドルタイムスケジューリング優先度の実行・確認・修正

書式
[id|rt]prio [id|rt]prio [-]pid [id|rt]prio priority command [args] [id|rt]prio priority - pid [id|rt]prio -t command [args] [id|rt]prio -t - pid

解説
rtprio はリアルタイムプロセススケジューリングに使用します。

idprio はアイドルタイムプロセススケジューリングに使用し、 rtprio と同じオプションにて使用します。

リアルタイム優先度のプロセスは優先度低下対象とはならず、 同じもしくはそれ以上のリアルタイム優先度のプロセスのみに横取りされます。

アイドル優先度のプロセスは、 実行可能な他のプロセスが存在せず、 優先度が同じもしくはより高い実行可能なアイドル優先度プロセスが存在しない 場合のみ実行します。

rtprio と idprio を引数無しで実行すると、現在のプロセスのリアルタイム優先度を表示します。

rtprio を引数 1 つと共に実行すると、指定した pid のリアルタイム優先度を返します。

priority を指定すると、プロセスまたはプログラムをリアルタイム優先度にて実行します。 -t を指定すると、プロセスまたはプログラムを通常のプロセス (非リアルタイムプロセス) として実行します。

-pid を指定すると、 pid をプロセス識別子として持つプロセスを修正します。 そうではなく、 command を指定すると、プログラムを引数付きで実行します。

priority は 0 から RTP_PRIO_MAX (通常 31) の整数値です。 0 は最高の優先度です。

pid に 0 を指定すると "現在のプロセス" を意味します。

root のみがリアルタイム優先度およびアイドル優先度を設定可能です。

診断
rtprio がコマンドを実行した場合、このコマンドの終了値が終了値となります。 その他の場合、 rtprio は成功時には 0 を、エラー時には 1 を終了値とします。

使用例
現在のプロセスのリアルタイム優先度を見ます:
    rtprio

プロセス 1423 のリアルタイム優先度を見ます:
    rtprio 1423

cron(8) を最低のリアルタイム優先度にて実行します:
    rtprio 31 cron

プロセス 1423 のリアルタイム優先度を 16 に変更します:
    rtprio 16 -1423

tcpdump(1) を非リアルタイム優先度にて実行します:
    rtprio -t tcpdump

リアルタイム優先度のプロセス 1423 を RTP_PRIO_NORMAL (非リアルタイム/通常の優先度) に変更します:
    rtprio -t -1423

他のマシンの使用の邪魔をせずに make depend します:
    idprio 31 make depend

関連項目
nice(1), ps(1), rtprio(2), setpriority(2), nice(3), renice(8)

歴史
rtprio は FreeBSD 2.0 から登場しましたが、HP-UX のものに似たバージョンでした。

警告
CPU を大量消費するプロセスをリアルタイム優先度で実行すると システムを操作できなくなります。

バグ
プロセス 0 (swapper) のリアルタイム優先度を設定及び確認する方法は有りません ( ps(1) を参照)。

FreeBSD ではプロセスのページがメモリ中に存在することを保証できないため、 プロセスがページインのために停止することが有ります ( mprotect(2), madvise(2) 参照)。

FreeBSD では、今のところシステムコール内で実行権を横取りされることはありません。 非リアルタイムプロセスが実行中であるために リアルタイムプロセスに実行権が割り当てられないことや、 アイドルプロセスが実行中であるために 通常優先度プロセスに実行権が割り当てられないことがあります。

作者
-nosplit Henrik Vestergaard Draboel <hvd@terry.ping.dk> はオリジナルの作者です。 David Greenman が FreeBSD への実装時に、ほとんどを書き直しました。