GETPRIORITY
Section: Linux Programmer's Manual (2)
Updated: 2002-06-21
Index
Return to Main Contents
NAME
getpriority, setpriority - get/set program scheduling priority
SYNOPSIS
#include <sys/time.h>
#include <sys/resource.h>
int getpriority(int which, int who);
int setpriority(int which, int who, int prio);
DESCRIPTION
The scheduling priority of the process, process group, or user, as
indicated by
which
and
who
is obtained with the
getpriority
call and set with the
setpriority
call.
The value
which
is one of
PRIO_PROCESS,
PRIO_PGRP,
or
PRIO_USER,
and
who
is interpreted relative to
which
(a process identifier for
PRIO_PROCESS,
process group
identifier for
PRIO_PGRP,
and a user ID for
PRIO_USER).
A zero value for
who
denotes (respectively) the calling process, the process group of the
calling process, or the real user ID of the calling process.
Prio
is a value in the range -20 to 20 (but see the Notes below).
The default priority is 0;
lower priorities cause more favorable scheduling.
The
getpriority
call returns the highest priority (lowest numerical value)
enjoyed by any of the specified processes. The
setpriority
call sets the priorities of all of the specified processes
to the specified value. Only the superuser may lower priorities.
RETURN VALUE
Since
getpriority
can legitimately return the value -1, it is necessary
to clear the external variable
errno
prior to the
call, then check it afterwards to determine
if a -1 is an error or a legitimate value.
The
setpriority
call returns 0 if there is no error, or
-1 if there is.
ERRORS
- EINVAL
-
which
was not one of
PRIO_PROCESS,
PRIO_PGRP,
or
PRIO_USER.
- ESRCH
-
No process was located using the
which
and
who
values specified.
In addition to the errors indicated above,
setpriority
may fail if:
- EPERM
-
A process was located, but its effective user ID did not match
either the effective or the real user ID of the caller,
and (on Linux systems) the caller did not have the
CAP_SYS_NICE
capability.
- EACCES
-
A non superuser attempted to lower a process priority.
NOTES
The details on the condition for EPERM depend on the system.
The above description is what SUSv3 says, and seems to be followed on
all SYSV-like systems.
Linux requires the real or effective user ID of the caller to match
the real user of the process who (instead of its effective user ID).
All BSD-like systems (SunOS 4.1.3, Ultrix 4.2,
BSD 4.3, FreeBSD 4.3, OpenBSD-2.5, ...) require
the effective user ID of the caller to match
the real or effective user ID of the process who.
The actual priority range varies between kernel versions.
Linux before 1.3.36 had -infinity..15. Linux since 1.3.43 has -20..19,
and the system call getpriority returns 40..1 for these values
(since negative numbers are error codes).
The library call converts N into 20-N.
Including
<sys/time.h>
is not required these days, but increases portability.
(Indeed,
<sys/resource.h>
defines the
rusage
structure with fields of type
struct timeval
defined in
<sys/time.h>.)
CONFORMING TO
SVr4, 4.4BSD (these function calls first appeared in 4.2BSD).
SEE ALSO
nice(1),
fork(2),
capabilities(7),
renice(8)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- ERRORS
-
- NOTES
-
- CONFORMING TO
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 00:11:36 GMT, May 13, 2005
www.fiveanddime.net