NOMBRE¶
getpriority, setpriority - obtiene/asigna la prioridad de planificación de
un programa
SINOPSIS¶
#include <sys/time.h>
#include <sys/resource.h>
int getpriority(int which, int who);
int setpriority(int which, int who, int
prio);
DESCRIPCIÓN¶
La prioridad de planificación del proceso, grupo de procesos o usuario,
según se indique en
which y
who se obtiene con la
función
getpriority y se asigna con
setpriority.
Which puede ser
PRIO_PROCESS,
PRIO_PGRP, o
PRIO_USER, y
who se interpreta en función de
which
(un indentificador de proceso para
PRIO_PROCESS, un indentificador de
grupo de procesos para
PRIO_PGRP, y un identificador de usuario para
PRIO_USER). Un valor cero de
who indica (respectivamente) el
proceso invocador, el grupo de proceso del proceso invocador, o el
identificador de usuario real del proceso invocador.
Prio es un valor
que puede variar de -20 a 20 (vea la sección Observaciones más
abajo) . La prioridad por defecto es 0; cuanto más baja es la prioridad
más favorable es la planificación.
La llamada
getpriority devuelve la prioridad más alta (el valor
numérico más bajo) de la que disfruta cualquiera de los procesos
especificados. La llamada
setpriority asigna el valor especificado a
las prioridades de todos los procesos especificados. Sólo el superusuario
puede decrementar las prioridades (haciéndolas, por tanto, más
altas).
VALOR DEVUELTO¶
Ya que
getpriority legítimamente puede devolver el valor -1, es
necesario borrar la variable externa
errno antes de la llamada a la
función y comprobar su valor más adelante para determinar si -1 es
un error o un valor legítimo. La función
setpriority devuelve
0 si no hay error o -1 si lo hay.
ERRORES¶
- ESRCH
- No se encontró ningún proceso que cumpliera con
los valores especificados por which y who.
- EINVAL
- Which no era PRIO_PROCESS, PRIO_PGRP,
ni PRIO_USER.
Además de los errores indicados arriba,
setpriority puede fallar si:
- EPERM
- Se encontró un proceso, pero ni el identificador de
usuario efectivo ni el identificador de usuario real del invocador
coinciden con su identificador de usuario efectivo.
- EACCES
- Un no superusuario intentó decrementar la prioridad de
un proceso.
OBSERVACIONES¶
Los detalles sobre la condición para EPERM dependen del sistema. La
descripción dada arriba es lo que dice SUSv3, y parece ser seguida por
todos los sistemas de tipo SYSV. Linux requiere que el identificador de
usuario real o efectivo del invocador coincida con el usuario real del proceso
who (en lugar de su identificador de usuario efectivo). Todos los
sistemas de tipo BSD (SunOS 4.1.3, Ultrix 4.2, BSD 4.3, FreeBSD 4.3,
OpenBSD-2.5, ...) requieren que el identificador de usuario efectivo del
invocador coincida con el identificador de usuario real o efectivo del proceso
who.
El rango real de prioridad varía entre las diferentes versiones del
núcleo. Las versiones de Linux anteriores a la 1.3.36 tenían
-infinito..15. A partir de la versión 1.3.43 se tiene -20..19, y la
llamada al sistema getpriority devuelve 40..1 para estos valores (puesto que
los números negativos son códigos de error). La llamada de
biblioteca convierte N a 20-N.
Incluir
<sys/time.h> no es obligatorio hoy día, pero
incrementa la portabilidad. (De hecho,
<sys/resource.h> define la
estructura
rusage con campos de tipo
struct timeval definida en
<sys/time.h>.)
SVr4, 4.4BSD (estas funciones aparecieron por primera vez en 4.2BSD).
VÉASE TAMBIÉN¶
nice(1),
fork(2),
renice(8)