В некоторых случаях в Linux может понадобиться ограничить программу в использовании процессора. Когда у нас слабое железо и требуется выполнить длительный и ресурсоёмкий процесс например. Для этого воспользуемся утилиткой cpulimit, для начала установим её:
1 | sudo apt install cpulimit |
Синтаксис использования:
1 | cpulimit [ЦЕЛЬ] [ОПЦИИ...] [-- ПРОГРАММА С ОПЦИЯМИ] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | ЦЕЛЬ должна быть в точности чем-то из: -p, --pid=N pid процесса -e, --exe=ФАЙЛ имя исполнимого файла программы Опция -e работает только если cpulimit запущена с правами администратора. -P, --path=ПУТЬ абсолютный путь до исполнимой программы ОПЦИИ -b --background запуск в фоне -f --foreground запуск целевого процесса в фоне и ожидание его выхода -c --cpu=N переписать определение ЦПУ на машине -l, --limit=N разрешённые для использования проценты cpu. На одноядерных системах от 1 - 100, на многоядерных системах может быть выше (обязательная опция) -m, --monitor-forks Просмотр детей/форков целевого процесса -q, --quiet запуск в тихом режиме (печатаются только ошибки). -k, --kill завершить процесс, выходящий за лимиты вместо того, чтобы ограничивать его. -r, --restore Восстановить процессы, после того, как они были завершены. Работает с флагом -k. -s, --signal=SIG Отправить этот сигнал наблюдаемому процессу, когда cpulimit выходит. Сигнал должен быть указан как номер, или SIGTERM, SIGCONT, SIGSTOP и т.д. SIGCONT это значение по умолчанию. -v, --verbose показать контрольную статистику -z, --lazy выйти если нет подходящего целевого процесса, или если он завершился -- Это финальная опция CPUlimit. Все последующие опции предназначены для другой запускаемой программы. -h, --help показать справку и выйти |
Контроль использования количества CPU выполняется отправкой процессу сигналов SIGSTOP и SIGCONT
Например запуск firefox и контроль использования программой 25% процессора:
1 | sudo cpulimit -l 25 -- firefox |
Или ограничим 50% цпу процесс с pid 1234
1 | sudo cpulimit -p 1234 -l 50 |