Приоритет процессов в Linux. Для чего он нужен и как им управлять?

приоритет процессов в linux. для чего он нужен и как им управлять?

Введение в приоритеты процессов

В ядро любой операционной системы, в том числе и Linux, входит планировщик задач. В общих чертах планировщик является программным модулем осуществляющим распределение процессорного времени между работающими программами. Он решает, какому процессу отдать управление в зависимости от его приоритета. Это необходимо, чтобы ни одна программа не смогла захватить все доступные ресурсы и выполняться монопольно.

Программа не может самостоятельно изменить свой приоритет. Распределение ведется исходя из множества факторов. Например, процесс, обрабатывающий операции ввода-вывода получит управление с большей вероятностью, чем осуществляющий математические операции. Смысл такого поведения в том, что математическую операцию легко повторить, а данные, присланные по сети и не сохраненные на диск, могут быть бесследно утрачены.

Значение приоритета процесса в Linux определяется числом от -20 до 19. Чем меньше число, тем больше приоритет. По умолчанию большинство программ запускается со значением 0. Увидеть приоритеты запущенных процессов можно с помощью команды top. В её выводе присутствует колонка с именем «PR». Также команда ps с опцией -l выведет схожую информацию. Нужная колонка называется «NI».

#запустим текстовый редактор в фоновом режиме
gedit &
[1] 1242

#выведем список процессов с их приоритетами
ps -l
F S   UID  PID PPID  C PRI NI ADDR  SZ WCHAN  TTY          TIME CMD
0 S  1000  935  916  0  80  0 -   6008 wait   pts/2    00:00:00 bash
0 S  1000 1242  935  6  80  0 - 165790 poll_s pts/2    00:00:00 gedit
0 R  1000 1426  935  0  80  0 -   7541 -      pts/2    00:00:00 ps

Заметка
В Linux помимо планировщика задач приоритетом процессов может управлять пользователь. Это довольно полезно в ряде случаев. Например, вы выполняете резервное копирование жесткого диска, но предпочли бы продолжить работу с ПК. Для этого можно понизить приоритет соответствующей задачи, что заставит её выполняться дольше, зато вы не почувствуете дискомфорт и каких-либо «тормозов».

Назначение приоритета новому процессу

Если вы хотите присвоить приоритет сразу при запуске программы, используйте команду nice. Опция -n ожидает получить числовое значение приоритета, а в качестве параметра необходимо указать имя запускаемой программы и список её атрибутов. В общем виде запуск команды можно представить как «nice -n -10 имя_программы [-опции] [параметры]».

#запуск архивирования пользовательской директории
nice -n 20 tar -czf ~/archive ~/some-dir &
[2] 10077

ps -l
F S   UID   PID  PPID  C  PRI NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000 10077   935  2   99 19 -  7708 pipe_w pts/2    00:00:00 tar
0 R  1000 10078 10077  48  99 19 -  1160 -      pts/2    00:00:02 gzip
...

Управление ранее запущенным процессом

Команда renice позволяет управлять приоритетом уже запущенного процесса. При этом существует одно правило — обычный пользователь Linux может только уменьшать приоритеты, а повышать только администратор. Renice в качестве первого параметра ожидает получить значение приоритета, а вторым должен быть PID процесса.

#снова используем текстовый редактор для примера
nice -n 10 gedit &
[1] 1242

#посмотрим текущий приоритет
ps -l
F S   UID   PID  PPID  C  PRI NI ADDR SZ  WCHAN  TTY          TIME CMD
0 S  1000 16342   935  3   90 10 - 165823 poll_s pts/2    00:00:00 gedit

#изменим приоритет процессами
renice 19 16342
16342 (process ID) старый приоритет 10, новый приоритет 19
ps -l
F S   UID   PID  PPID  C  PRI NI ADDR SZ  WCHAN  TTY          TIME CMD
0 S  1000 16342   935  0   99 19 - 165823 poll_s pts/2    00:00:00 gedit

Последние публикации