setpriority(2) obtiene/asigna la prioridad de planificación de

Other Alias

getpriority

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>.)

CONFORME A

SVr4, 4.4BSD (estas funciones aparecieron por primera vez en 4.2BSD).