103.6 - Modificar prioridades de procesos: Teoria

1. Conceptos de prioridad en Linux

Como gestiona Linux la CPU

Linux es un sistema operativo multitarea que puede ejecutar multiples procesos aparentemente al mismo tiempo. El planificador del kernel (scheduler) decide que proceso se ejecuta en cada momento y durante cuanto tiempo. La prioridad determina cuanto tiempo de CPU recibe cada proceso en comparacion con los demas.

Dos valores de prioridad

En Linux existen dos valores relacionados con la prioridad de un proceso:

ConceptoRangoDescripcion
Nice value (NI)-20 a 19Valor que el usuario puede modificar. Menor = mas prioridad
Priority (PR/PRI)0 a 139Prioridad real del kernel. El usuario no la modifica directamente

Valor nice (niceness)

El valor nice representa la “amabilidad” del proceso con los demas:

  • Un proceso mas nice (valor alto) cede CPU a otros procesos = menor prioridad
  • Un proceso menos nice (valor bajo/negativo) acapara CPU = mayor prioridad
NiceSignificadoQuien puede asignarlo
-20Maxima prioridad (menos amable)Solo root
0Prioridad por defectoCualquier usuario
19Minima prioridad (mas amable)Cualquier usuario

Regla fundamental para el examen: Un usuario normal solo puede subir el valor nice (bajar prioridad, rango 0 a 19). Solo root puede bajar el valor nice (subir prioridad, valores negativos de -20 a -1).

Relacion entre nice y priority

La prioridad real del kernel (PR) se calcula a partir del nice value:

PR = 20 + NI
Nice (NI)Priority (PR)Prioridad real
-200Maxima prioridad
020Prioridad por defecto
1939Minima prioridad

Nota: Los valores de PR 0-39 son para procesos normales. Los valores de PR por debajo de 0 (mostrados como “rt” en top) son para procesos en tiempo real, que no se gestionan con nice.


2. nice - Iniciar un proceso con prioridad modificada

Sintaxis

nice [OPCION] [COMANDO]

Uso basico

# Ejecutar con prioridad por defecto (nice 0)
comando
 
# Ejecutar con nice 10 (prioridad por defecto de nice si no se especifica valor)
nice comando
 
# Ejecutar con nice 15
nice -n 15 comando
 
# Ejecutar con nice -5 (solo root)
nice -n -5 comando
 
# Ejecutar con nice -20 (maxima prioridad, solo root)
nice -n -20 comando
 
# Ejecutar con nice 19 (minima prioridad)
nice -n 19 ./proceso_pesado.sh

Comportamiento por defecto

nice comando

Sin especificar un valor, nice usa un incremento de 10. Es decir, el proceso se inicia con nice value de 10.

Ejemplos practicos

# Compilacion pesada con baja prioridad para no afectar al sistema
nice -n 19 make -j4
 
# Proceso critico con alta prioridad (solo root)
sudo nice -n -10 ./proceso_critico
 
# Backup con prioridad baja
nice -n 15 tar czf /backup/datos.tar.gz /home/

Sintaxis alternativa (obsoleta pero valida)

nice -15 comando      # Equivale a nice -n 15 comando
nice --15 comando     # Equivale a nice -n -15 comando (solo root)

Para el examen: La forma recomendada y mas clara es nice -n VALOR comando.


3. renice - Cambiar la prioridad de un proceso en ejecucion

Sintaxis

renice [-n] PRIORIDAD [-p PID] [-u USUARIO] [-g GRUPO]

Uso basico

# Cambiar nice de un proceso por PID
renice -n 10 -p 1234
 
# Forma abreviada (PID por defecto)
renice 10 1234
 
# Cambiar nice de todos los procesos de un usuario
renice -n 5 -u sandra
 
# Cambiar nice de todos los procesos de un grupo
renice -n 5 -g developers
 
# Dar maxima prioridad a un proceso (solo root)
renice -n -20 -p 1234
 
# Cambiar multiples procesos
renice -n 10 -p 1234 -p 5678

Restricciones de usuario

AccionUsuario normalRoot
Subir nice (bajar prioridad)Si, solo sus propios procesosSi, cualquier proceso
Bajar nice (subir prioridad)NOSi, cualquier proceso
Revertir un cambio de niceNO (no puede bajar el nice una vez subido)Si
Modificar procesos de otros usuariosNOSi

Muy importante para el examen: Un usuario normal que sube el nice de su proceso a 15 no puede volver a bajarlo a 0. Solo root puede hacerlo. Esto es una restriccion de seguridad.


4. Verificar prioridades con ps

Columnas relevantes

# Ver nice y prioridad de todos los procesos
ps -eo pid,ni,pri,comm
 
# Formato completo con nice
ps -eo pid,user,ni,pri,%cpu,%mem,comm --sort=-ni
 
# Ver nice de un proceso especifico
ps -o pid,ni,pri,comm -p 1234
ColumnaSignificado
NI o niValor nice (-20 a 19)
PRI o priPrioridad del kernel

Ejemplo de salida

  PID  NI PRI COMMAND
    1   0  20 systemd
  523 -10  30 proceso_critico
 1234  10  10 backup
 5678  19   1 compilacion

5. Verificar y cambiar prioridades con top

Ver prioridades en top

En top, las columnas relevantes son:

  • PR: Prioridad del kernel (menor = mas prioridad)
  • NI: Valor nice del proceso

Cambiar prioridad desde top

  1. Ejecutar top
  2. Presionar r (renice)
  3. Introducir el PID del proceso
  4. Introducir el nuevo valor nice

Para el examen: Recuerda que la tecla r en top sirve para cambiar el nice (renice) de un proceso interactivamente.


6. Resumen de reglas clave para el examen

Valores nice

Rango nice:      -20 ........... 0 ........... 19
                 |                |              |
                 Maxima          Default         Minima
                 prioridad                       prioridad
                 (solo root)     (todos)         (todos)

Reglas de permisos

  1. Por defecto, todos los procesos se inician con nice 0
  2. nice comando (sin valor) inicia con nice 10
  3. Un usuario normal solo puede subir el nice de sus propios procesos (0 a 19)
  4. Un usuario normal no puede bajar el nice (no puede poner valores negativos)
  5. Un usuario normal no puede revertir un cambio de nice (si subio a 10, no puede volver a 0)
  6. Solo root puede asignar valores nice negativos (-20 a -1)
  7. Solo root puede cambiar el nice de procesos de otros usuarios
  8. La relacion es: PR = 20 + NI

Diferencia entre nice y renice

Aspectonicerenice
Cuando se usaAl iniciar un procesoCon un proceso ya en ejecucion
ArgumentoUn comando a ejecutarUn PID, usuario o grupo
Sintaxisnice -n 10 comandorenice -n 10 -p PID
Valor por defecto10 (si no se especifica)No tiene default

Trampas del examen

Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:

  • nice sin valor usa 10, NO 0nice comando inicia el proceso con nice 10 (menor prioridad), no con 0. El examen puede preguntar con que valor nice se inicia un proceso al usar nice sin especificar valor.
  • Valores negativos de nice = MAS prioridad — El rango va de -20 (maxima prioridad) a 19 (minima prioridad). Un valor nice MENOR significa MAS prioridad. El examen puede intentar confundir presentando -20 como “baja prioridad”.
  • Solo root puede asignar nice negativo — Un usuario normal solo puede asignar valores de 0 a 19 a sus propios procesos. Solo root puede usar valores negativos (-20 a -1) o modificar procesos de otros usuarios.
  • Un usuario normal NO puede revertir su propio nice — Si un usuario sube el nice de su proceso de 0 a 10, NO puede volver a bajarlo a 0. Solo root puede reducir el valor nice. El examen puede preguntar si un usuario puede deshacer un cambio de nice.
  • nice es para procesos NUEVOS; renice para procesos EXISTENTESnice -n 5 comando inicia el comando con nice 5; renice -n 5 -p PID cambia el nice de un proceso ya en ejecucion. El examen puede confundir cuando usar cada uno.
  • PR = 20 + NI — La prioridad real (PR) mostrada en top se calcula como 20 + NI. Un nice de -20 da PR=0; un nice de 19 da PR=39. El examen puede preguntar que valor de PR corresponde a un nice dado.
  • renice usa -p para PID, -u para usuario, -g para gruporenice -n 5 -p 1234 cambia un proceso; renice -n 5 -u sandra cambia todos los procesos de un usuario. El examen puede mezclar estos flags.