getpriority(2) -- Linux man page
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.
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 super-user 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
- ESRCH
-
No process was located using the
which
and
who
values specified.
- EINVAL
-
Which
was not one of
PRIO_PROCESS,
PRIO_PGRP,
or
PRIO_USER.
In addition to the errors indicated above,
setpriority
may fail if:
- EPERM
-
A process was located, but neither the effective nor the real user
ID of the caller matches its effective user ID.
- EACCES
-
A non super-user 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),
renice(8)
|