El comando completo que quieres es:
chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]
El chrtcomando al principio cambiará las cosas a la clase de programación por lotes, que es equivalente a agregar 0.5 al valor agradable. La opción -n para ionice es una prioridad simple para las opciones en tiempo real ( -c 1) y de mejor esfuerzo ( -c 2), siendo los valores más bajos una prioridad más alta al igual que los valores agradables (pero en el rango 0-7). Sin embargo, el comando ionice no es estrictamente necesario, ya que la clase de programación de E / S y la prioridad se derivan por defecto de los parámetros de programación de la CPU, e nice -n 19implica ionice -c 2 -n 7.
Sin embargo, puede obtener el uso mínimo absoluto de recursos configurando tanto la CPU como las clases de programación de E / S en inactivo. En ambos casos, los programadores 'inactivos' no son realmente programadores inactivos, y aún podrá utilizar los recursos, es solo que todo tendrá mayor prioridad.
Para la clase de programación de CPU, esto también usa el chrtcomando, aunque sin necesidad nice(la prioridad debe establecerse 0en la clase de programación inactiva), y se ve así:
chrt -i 0 {command or PID}
El nicecomando en Linux refleja la versión SVR4, lo que significa que no puede cambiar la clase de programación, solo un buen valor (que también se comporta de manera diferente en Linux que UNIX clásico, pero eso es un poco OT). Como las clases de programación alternativas originales eran POSIX.1E en tiempo real SCHED_RRy SCHED_FIFO, el comando para establecer clases de programación terminó siendo llamado chrt. La -iopción especifica usar la SCHED_IDLEclase de programación
Para la clase de programación de E / S, usted usa ionice. El comando exacto se ve así:
ionice -c 3 {command or PID}
La -copción especifica qué clase de programación usar, y 3 es el número para la clase inactiva. Tenga en cuenta que, según el bloque de planificador de E / S que se esté utilizando, esto puede no afectar realmente nada. En particular, el noopprogramador de E / S no admite prioridades o clases de programación en absoluto, y estoy bastante seguro de que los deadlineprogramadores (tanto el heredado como el blk-mq) tampoco lo hacen.
Si quieres hacer esto mediante programación, ya sea para su propio programa, o para ajustar las cosas para otros procesos, echa un vistazo a las páginas de manual para las sched_setschedulery ioprio_setllamadas al sistema (aunque ambos son vale la pena leer si lo que desea obtener más antecedentes también).