Modify process execution priorities (Weight 2)

Candidates should should be able to manage process execution priorities.
Know the default priority of a job that is created.
Run a program with higher or lower priority than the default.
Change the priority of a running process.

The following is a partial list of the used files, terms and utilities

nice
renice

Отображение и установка приоритетов

Системы Linux и UNIX используют систему приоритетов из 40 значений

-20 наивысший приоритет
19 низший приоритет

nice UNIX-утилита, запускающая программу с измененным приоритетом для планировщика задач.
Процессы обычных пользователей обычно имеют нулевой приоритет. Команда nice отобразит приоритет по умолчанию

# nice
0

Команда ps также может отображать приоритет (nice, или NI, уровень) с помощью опции -l

ps -l
F S   UID PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY    TIME CMD
4 S    0 16866 13488  0  80 0 -  2140 wait  pts/0  00:00:00 su
0 S    0 16883 16866  0  80 0 -  1969 wait  pts/0  00:00:00 bash
4 R    0 17668 16883  0  80 0 -  1380 -     pts/0  00:00:00 ps

Изменить приоритет при запуске можно 4 равнозначными способами

$ nice -10 script.sh
$ nice -n 10 script.sh
$ nice --adjustment=10 script.sh
$ nice script.sh
!По умолчанию если не указан приоритет nice устанавливает 10
$ nice ./sh
$ ps -al
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY   TIME CMD
0 S  1000 30976 30752  0  90  10 -   474 wait   pts/0    00:00:00 sh

Процесс с наименьшим значением приоритета работает чаще всех, увеличение значения приоритета означает для процесса быть более дружелюбным по отношению к другим процессам. Обычно требуются права суперпользователя (root), чтобы применять отрицательные значения. Другими словами, обычные пользователи могут только сделать свои процессы более дружелюбными.

renice UNIX-утилита, позволяющая изменить приоритет запущенных задач.

!Привилегированный пользователь root может указать отрицательное смещение.

Опции команды renice

-g Specifies the priority for processes executed by members of the specified group.
-u Specifies the priority level for processes executed by the specified user.
-p Specifies the priority level for the specified process.

Изменим приоритет работающего процесса

$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000 20471 20466  0  80   0 -  1969 wait   pts/0    00:00:00 bash
$ renice 10 20471
20471: старый приоритет 0, новый приоритет 10
$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000 20471 20466  0  90  10 -  1969 wait   pts/0    00:00:00 bash

Попробуем больше процессорного времени отдать процессу из под обычного пользователя

$ renice -10 20471
renice: 20471: setpriority: Отказано в доступе

Что и следовало ожидать. Только root пользователь может устанавливать повышенный приорите для задачи.

Вопросы по LPI (приблизительные)

1) Which two of the following commands are equivalent to one another? (Select two.)
A. nice --value 10 crunch
B. nice -n -10 crunch
C. nice -10 crunch
D. nice crunch
2) Which of the following are restrictions on ordinary users’ abilities to run renice?
(Select all that apply.)
A. Users may not modify the priorities of processes that are already running.
B. Users may not modify the priorities of other users’ processes.
C. Users may not decrease the priority (that is, increase the priority value) of their own processes.
D. Users may not increase the priority (that is, decrease the priority value) of their own processes.
3) Which command is used to set the priority of a process when it is started?
A. jobs
B. renice
C. nice
D. top

Ответы

1)  The correct answer is C, D.
Option A isn’t a valid nice command because nice has no --value option
Option B is a valid nice command, but it sets the priority to –10 rather than 10
The default priority when none is specified is 10, and the nice -10
crunch command also sets the priority to 10, so options C and D are equivalent. 
2)  The correct answer is B, D. 
Only root may modify the priority of other users’ processes. 
Similarly, only root may increase the priority of a process, 
in order to prevent users from setting their processes to maximum priority thus stealing CPU 
time from others. Option A correctly describes nice, but not renice; the whole point of renice 
is to be able to change the priorities of existing processes. Option C also describes an action 
that renice permits.
3) The correct answer is C. 
The nice command is used to change the priority level of a process when it is started.

Читать:
Process execution priorities
Приоритеты исполнения процесса