Полная команда, которую вы хотите:
chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]
Команда chrtв начале переключит вещи в класс пакетного планирования, что эквивалентно добавлению 0.5 к значению nice. Опция -n для ionice является простым приоритетом для опций realtime ( -c 1) и best-Усилия ( -c 2), причем более низкие значения имеют более высокий приоритет, как и хорошие значения (но в диапазоне 0-7). Однако команда ionice не является строго необходимой, поскольку класс и приоритет планирования ввода-вывода по умолчанию определяются из параметров планирования ЦП и nice -n 19подразумевают ionice -c 2 -n 7.
Однако вы можете получить абсолютное минимальное использование ресурсов, установив классы планирования ЦП и В / В в состояние ожидания. В обоих случаях «незанятые» планировщики на самом деле не являются незанятыми, и вы все равно сможете использовать ресурсы, просто все будет иметь более высокий приоритет.
Для класса планирования ЦП это также использует chrtкоманду, хотя и без необходимости nice(приоритет должен быть установлен 0в классе планирования ожидания), и выглядит следующим образом:
chrt -i 0 {command or PID}
Команда niceв Linux отражает версию SVR4, что означает, что она не может изменить класс планирования, только хорошее значение (которое также ведет себя иначе в Linux, чем в классической UNIX, но это немного OT). Поскольку исходные альтернативные классы планирования были в реальном времени POSIX.1E SCHED_RRи SCHED_FIFO, в итоге, была вызвана команда для установки классов планирования chrt. В -iпараметр указывает , использовать SCHED_IDLEкласс планирования
Для класса планирования ввода / вывода вы используете ionice. Точная команда выглядит так:
ionice -c 3 {command or PID}
В -cопции определяет , что планирование класс использования, а 3 это число для праздного класса. Обратите внимание, что в зависимости от того, какой блок ввода-вывода используется планировщик, это может на самом деле не влиять ни на что. В частности, noopпланировщик ввода-вывода вообще не поддерживает приоритеты или классы планирования, и я почти уверен, что deadlineпланировщики (как устаревшие, так и blk-mq) тоже не поддерживают.
Если вы хотите сделать это программно, либо для своей собственной программы, либо для настройки других процессов, посмотрите справочные страницы для системных вызовов sched_setschedulerи ioprio_setсистемных вызовов (хотя оба они заслуживают чтения, если вы просто хотите иметь больше информации).