2011-10-01 10 views
7

私はC言語でunixの 'nice'コマンドとは異なる風味を実装しようとしています。nice()システムコールとsetpriority()コールの定義を見てきました。 nice()呼び出しは、プロセスの優先度を増減します。プロセスの優先度を特定の値に設定したい場合、nice()コールを使用できませんか?基本的には、優先順位の変更方法以外にnice()とsetpriority()の間に違いがありますか?UNIXでのniceとsetpriorityの相違

答えて

8

これは歴史的です。 nice()は、setpriority()よりずっと前に導入されました。下位互換性のために、nice機能は保持されていました。

+0

setpriorityはniceの進歩です。おかげで、tatは私の疑問を解決しました。niceとsetpriorityが異なる(lame、私が知っている:)という「優先度」があるのか​​疑問に思っていました) )それ自体。 –

+0

@AswinParthasarathyこれはdup2の歴史に似ています。どちらの場合でも、より一般的な(またはより具体的な)振る舞いが必要であることが分かりました。なぜなら、一部の関数がオーバーラップする振る舞いをしているように見えるからです。 –

+0

@Aswin:実際には、 'sched_setscheduler()'によって設定されるその他の優先順位があります。 – ninjalj

8

niceは、独自の優先順位(現在のプロセスの正当性)を設定します。 setpriorityを使用すると、他のプロセス(またはプロセスグループまたはユーザー)の正当性を設定できます。それをreniceと考えてください。

男の素敵な3P素敵

int型(int型INCR)。

マニュアル3Pのsetpriority

int型のsetpriority(id_tは、int値INT)。

+0

ええ、でも、私は善良なもので達成することができますか? –

+1

はい、しかしnice * onlyは現在のプロセスに影響します。ここでは、setpriorityが(潜在的に)どのプロセスにも影響を与えることができます。それは違いです。 –

+0

@Chrisなぜ、誰かがsetpriority/getpriorityが行動を複製するために使用できるときに、誰かがniceを使うのに焦点が当てられているようです。 –

2

nice()は現在のnice値を基準にして現在のプロセスのnice値を変更するので、プロセスはnice値の開始を知る必要はなく、システムにとってより良いはずです(例:aプロセスが何らかのバックグラウンド処理を行う子を起動すると、子プロセスは自分自身を素敵に設定します)。

setpriority()ユースケースは、絶対的なnice値を特定のプロセスに明示的に設定するユーザーです。