С помощью команд nice и renice можно изменить, должен ли определенный процесс получать приоритет при потреблении CPU.
Каждый процесс, запущенный на Linux-машине, имеет приоритет выполнения, который можно выразить в том, сколько мощности процессора будет отдано этому процессу для выполнения.
Конечно, в Linux вы можете контролировать столько, сколько хотите, поэтому вы также можете контролировать, какой приоритет должен быть у того или иного процесса в системе при его запуске.
Как проверить приоритет процесса?
Если вы выполните команду ps, вы сможете увидеть, какие процессы запущены в вашей системе Linux, и какой у них приоритет:
Как найти время выполнения команды или процесса в Linux
Теперь, если вы хотите запустить что-то с большим приоритетом (в то время как приоритет – это больше мощности процессора), вы можете использовать команду ‘nice’, чтобы запустить его и контролировать, насколько этот конкретный процесс влияет на остальную систему.
Приоритет “влияния” этой команды идет от -20 до 19, где -20 означает наивысший приоритет и, как следствие, как можно больше мощности процессора, до 19, что является наименьшим возможным значением и, следовательно, меньшим назначением мощности процессора.
🐧 Понимание процессов Linux с нуля
Как использовать команду nice?
Чтобы использовать команду nice, вы должны быть root или иметь права sudo в системе, поскольку это очень тонкая команда.
Предполагая, что вы являетесь root, введите:
Команда сообщит системе, что вы хотите запустить <command>, используя приоритет 12 (по умолчанию 10, если вы не введете никакого значения).
В принципе, она будет занимать низкое место в списке приоритетов и, следовательно, не будет высасывать всю мощность процессора.
Для чего это полезно?
Представьте, что у вас есть процесс, который выполняет несколько вычислений и может занимать несколько секунд или даже минут.
Чем больше мощности будет выделено этому процессу, тем быстрее он будет выполняться и завершится.
Именно здесь эта команда может стать полезной, хотя и опасной.
Если у вас есть скрипт, который запускает множество процессов, в общей среде или на рабочем сервере, запуск чего-то с более высоким приоритетом может привести к тому, что сервер перестанет реагировать на запросы или станет неисправным.
Это связано с тем, что процессор будет занят почти исключительно запуском процесса, который вы вызвали с высоким приоритетом (или отрицательным значением), поэтому он станет невосприимчивым или даже убьет сервер, если ваш скрипт, например, имеет бесконечный цикл.
Как изменить приоритет запущенного процесса с помощью команды renice?
Допустим, вы запустили процесс с помощью команды nice, но через некоторое время захотели изменить его приоритет, хотя вам нужно, чтобы процесс продолжал работать, а не был убит или перезапущен.
Здесь на помощь приходит команда ‘renice’.
Команда ‘renice’ может быть использована очень похожим образом и с использованием той же концепции, что и команда nice, однако она предназначена для изменения приоритета, который вы уже назвали nice.
Итак, если вы уже выполняете команду с помощью nice, вы можете изменить ее приоритет с помощью renice следующим образом (опять же, выполняя ее от имени пользователя root):
Это изменит предыдущий приоритет процесса на более важный, поэтому теперь он имеет больше полномочий (-10).
Вы даже можете использовать его для всех процессов, принадлежащих определенному пользователю, например:
Это изменит приоритет всех процессов, принадлежащих пользователю helder.
Аналогично можно использовать такие опции, как -p и указать идентификатор процесса (или pid) или -g и использовать идентификатор группы процессов.
Заключение
Вы видите, как Linux позволяет контролировать все, что возможно в вашей системе, и позволяет использовать это в свою пользу.
Возможность назначать и переназначать приоритеты процессам дает нам много возможностей, чтобы контролировать, как наша система управляет процессами, насколько эффективно, а также чему отдать приоритет, чтобы соответствовать любой необходимости, которая у вас может возникнуть.
см. также:
- 🐉 Файловая система Kali Linux
- 🐧 Как исправить ошибки и опечатки в предыдущих консольных командах в Linux