Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

getpriority, setpriority - Prozesspriorität abrufen bzw. setzen

&pagelevel(4)&pagelevel

Definition

#include <sys/resource.h>

int getpriority(int which, id_t who);

int setpriority(int which, id_t who, int priority);

Beschreibung

getpriority() ruft die aktuelle Scheduling-Priorität des Prozesses, der Prozessgruppe oder des Benutzers ab.

setpriority() setzt die Scheduling-Priorität des Prozesses, der Prozessgruppe oder des Benutzers.

Die Argumente which und who legen fest, welcher Prozess angesprochen wird. which kann die folgenden Werte annehmen: PRIO_PROCESS, PRIO_PGRP oder PRIO_USER. Davon abhängig wird der Inhalt von who interpretiert als Prozess-ID, Prozessgruppen-ID oder Benut-zer-ID. Ein Nullwert für who bezeichnet den aktuellen Prozess, die aktuelle Prozessgruppe oder den aktuellen Benutzer.

getpriority() gibt die höchste Priorität (den niedrigsten numerischen Wert) zurück, die von einem der angegebenen Prozesse in Anspruch genommen wird. setpriority() setzt die Prioritäten aller angegebenen Prozesse auf den durch priority angegebenen Wert.

Die Standardpriorität ist 0; niedrigere Prioritäten bedeuten ein verbessertes Scheduling. Wenn prio unter -20 liegt, wird der Wert -20 verwendet; liegt er über 20, wird der Wert 20 verwendet.

Nur entsprechend berechtigte Benutzer können Prioritäten vermindern.

Bei der Verwendung von Threads wirken sich die Funktionen getpriority() und ssetpriority() bezüglich Wirkung auf den Prozess oder auf einen Thread:

  • Abfragen bzw. setzen der Scheduling-Priorität des Prozesses.

  • Wenn der Prozess ”multithreaded” ist, wirkt sich die Scheduling-Priorität auf alle Threads des Prozesses aus.

Returnwert

getpriority():

-20 ≤ Returnwert ≤ 20



bei Erfolg.


-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

 

setpriority():

 

0

bei Erfolg.


-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

getpriority() und setpriority() schlagen fehl, wenn gilt:

 

ESRCH

Es wurde kein Prozess gefunden, auf den die angegebenen Werte which und who zutreffen.

 

EINVAL

which war weder PRIO_PROCESS, PRIO_PGRP noch PRIO_USER, oder who enthielt keine gültige Prozess-ID, Prozessgruppen-ID oder Benutzer-ID.

 

Zusätzlich kann setpriority() fehlschlagen, wenn gilt: 

 

EPERM

Es wurde ein Prozess gefunden, aber weder die effektive noch die reale Benutzer-ID stimmt mit der effektiven Benutzer-ID des Prozesses überein, dessen Priorität geändert werden soll.

 

EACCES

Es wurde versucht, die Priorität auf einen kleineren Wert zu setzen, was einer höheren Priorität entspricht, aber der aktuelle Prozess hat nicht die entsprechende Berechtigung.

Hinweis

Wie sich das Ändern der Scheduling-Priorität auswirkt, hängt von dem Algorithmus des Prozess-Scheduling ab.

Da getpriority() legitimerweise auch den Wert -1 zurückgeben kann, muss die externe Variable errno vor dem Aufruf gelöscht und anschließend geprüft werden, um festzustellen, ob es sich bei dem Wert -1 um einen Fehler oder einen zulässigen Wert handelt. 

Siehe auch

nice(), sys/resource.h.