Unix-system-calls-getpriority

提供:Dev Guides
移動先:案内検索

[top]#

[[File:]]

[[File:]]

|Web |This Site

  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

  Home     References     Discussion Forums     About TP  

getpriority()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

getpriority、setpriority-プログラムのスケジューリング優先度の取得/設定

概要

  • #include <sys/time.h> * *#include <sys/resource.h> *
*int getpriority(int* __which __ **、int * *__who __* *); ** *int setpriority(int* __which __ **、int * *__who __* *、int * *__prio __* *); **

説明

_which_および_who_で示されるプロセス、プロセスグループ、またはユーザーのスケジューリング優先順位は、 getpriority ()呼び出しで取得され、 setpriority ()呼び出しで設定されます。

値_which_は PRIO_PROCESSPRIO_PGRP 、または PRIO_USER のいずれかであり、who_は_whichPRIO_PROCESS のプロセスID、 PRIO_PGRP のプロセスグループID、および PRIO_USERのユーザーIDに対して相対的に解釈されます。 )。 _who_のゼロ値は、(それぞれ)呼び出しプロセス、呼び出しプロセスのプロセスグループ、または呼び出しプロセスの実際のユーザーIDを示します。 _Prio_は、-20〜19の範囲の値です(ただし、以下の注を参照してください)。 デフォルトの優先度は0です。優先順位が低いと、より有利なスケジューリングが行われます。

*getpriority* ()呼び出しは、指定されたプロセスのいずれかが享受する最高の優先順位(最も低い数値)を返します。 *setpriority* ()呼び出しは、指定されたすべてのプロセスの優先順位を指定された値に設定します。 スーパーユーザーのみが優先順位を下げることができます。

返り値

*getpriority* ()は正当に値-1を返すことができるため、呼び出しの前に外部変数_errno_をクリアし、後でそれをチェックして-1がエラーまたは正当な値であるかどうかを判断する必要があります。 *setpriority* ()呼び出しは、エラーがない場合は0を返し、エラーがある場合は-1を返します。

エラー

Tag

説明

*EINVAL*

_which_は、 PRIO_PROCESSPRIO_PGRP 、または PRIO_USER のいずれでもありませんでした。

*ESRCH*

指定された_which_および_who_値を使用してプロセスが見つかりませんでした。

上記のエラーに加えて、 setpriority ()は次の場合に失敗する可能性があります。

*EPERM*

プロセスは見つかりましたが、その実効ユーザーIDは呼び出し元の実効ユーザーIDまたは実ユーザーIDのいずれとも一致せず、特権もありません(Linuxの場合: CAP_SYS_NICE 機能がありませんでした)。 しかし、下記の注を参照してください。

*EACCES*

呼び出し元はプロセスの優先度を下げようとしましたが、必要な特権を持っていませんでした(Linuxの場合: CAP_SYS_NICE 機能を持っていませんでした)。 Linux 2.6.12以降、このエラーは、呼び出し元がターゲットプロセスの RLIMIT_NICE ソフトリソース制限の範囲外のプロセス優先度を設定しようとした場合にのみ発生します。詳細については、 getrlimit (2)を参照してください。

ノート

*fork* (2)によって作成された子は、親のnice値を継承します。 nice値は *execve* (2)全体で保持されます。

EPERMの条件の詳細は、システムによって異なります。 上記の説明はPOSIX.1-2001が述べていることであり、すべてのSystem Vに似たシステムで守られているようです。 2.6.12より前のLinuxカーネルでは、呼び出し元の実際のユーザーIDまたは有効なユーザーIDが、プロセスの実際のユーザー_who_(有効なユーザーIDではなく)と一致する必要がありました。 Linux 2.6.12以降では、呼び出し元の実効ユーザーIDがプロセス_who_の実際のユーザーIDまたは実効ユーザーIDと一致する必要があります。 すべてのBSD系システム(SunOS 4.1.3、Ultrix 4.2、4.3BSD、FreeBSD 4.3、OpenBSD-2.5、…​)は、Linux> = 2.6.12と同じように動作します。

実際の優先順位の範囲は、カーネルのバージョンによって異なります。 1.3.36より前のLinuxには-infinity..15がありました。 カーネル1.3.43以降、Linuxの範囲は-20..19です。 カーネル内では、ナイス値は対応する範囲40..1を使用して実際に表されます(負の数はエラーコードであるため)。これらは setpriority ()および getpriority ()システムコールで使用される値です。 これらのシステムコールのglibcラッパー関数は、式_unice = 20-knice_に従って、nice値のユーザーランド表現とカーネル表現の間の変換を処理します。

一部のシステムでは、nice値の範囲は-20..20です。

_ <sys/time.h> を含めることは最近では必要ありませんが、移植性が向上します。 (実際、 <sys/resource.h> は、 <sys/time.h> _で定義されている_struct timeval_型のフィールドを持つ_rusage_構造体を定義します。)

準拠

SVr4、4.4BSD(これらの関数呼び出しは4.2BSDで初めて登場)、POSIX.1-2001。

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

  
Advertisements