Приоритет процесса определяет, как часто данный процесс, по сравнению с другими процессами, стоящими в очереди на выполнение процессора, будет исполняться процессором.
Вы должны понять, что приоритет — понятие относительное. Ведь в данный момент в очереди на выполнение могут стоят двадцать процессов, а в следующий — два. Поэтому приоритет — это «плавающее» значение, которое определяет сама система в зависимости от текущей ситуации.
В Linux значение приоритета может быть равно числу в диапазоне сорока значений. Как же я туманно выразился. На самом деле, все зависит от версии ядра Linux. Значение приоритета может быть в диапазоне от -20 до 19 или от 0 до 39. В обоих случаях возможное значение ограничено сорока числами. В ядрах версии 2.6.х значение приоритета находится в диапазоне от 0 до 39.
Чем меньше число – тем выше приоритет процесса. То есть процесс с приоритетом 5 имеет больший приоритет, чем процесс с приоритетом 16.
Вы не можете непосредственно изменять приоритет процесса, это прерогатива операционной системы. Но Вы можете определить, на сколько больше или меньше процесс будет «нравиться» системе. Для этого следует использовать поле nice. То есть для изменения приоритета администратор должен изменять значение поля nice. Если значение nice равно нулю — значит, у программы приоритет не изменен. Если в поле nice записано отрицательное число – приоритет процесса увеличен, положительное — уменьшен.
Давайте посмотрим на соответствующие поля, показанные программой ps:
$ ps -t pts/1 -o pid,pri,ni,comm PID PRI NI COMMAND 4205 24 0 bash 4246 24 0 ps $
Как видно из примера, у программ, выполняющихся на терминале pts/1, значение поля nice равно нулю. Следовательно, эти программы выполняются со стандартным приоритетом, установленным самой системой.
В следующем примере будут показаны программы с увеличенным приоритетом, которые в данный момент работают в системе (В качестве примера я хотел использовать программу ps «ps -e -o pid,pri,ni,comm», но почему-то значение поля приоритет выводилось неправильно. Нет в мире совершенства. Поэтому пришлось использовать top в командном режиме.)
$ top -b -n1 | grep "\-." | sed -e '1d' 3 root 10 -5 0 0 0 S 0.0 0.0 0:00.04 events/0 4 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 khelper 5 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread 7 root 10 -5 0 0 0 S 0.0 0.0 0:00.16 kacpid 100 root 10 -5 0 0 0 S 0.0 0.0 0:00.07 kblockd/0 146 root 12 -5 0 0 0 S 0.0 0.0 0:00.00 aio/0 147 root 12 -5 0 0 0 S 0.0 0.0 0:00.00 xfslogd/0 148 root 12 -5 0 0 0 S 0.0 0.0 0:00.00 xfsdatad/0 871 root 12 -4 1472 456 384 S 0.0 0.2 0:00.02 udevd 1506 root 10 -5 0 0 0 S 0.0 0.0 0:00.07 ipw2100/0 $
Как видите, таких программ достаточно много.
Любой пользователь системы может изменить значение поля nice. Но существуют два ограничения:
- Пользователь может изменить приоритет только у программ, выполняющихся с его правами.
- Пользователь может только понизить приоритет (записать положительное число в поле nice).
Как обычно, суперпользователь может все! Он может изменить приоритет любому процессу системы, он может уменьшать и увеличивать приоритеты.
Для изменения приоритета можно воспользоваться программой top. Сначала получим список всех процессов выполняемых пользователем user1. Для краткости, заголовок top я буду удалять.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME #C COMMAND 4316 user1 15 0 3332 1944 1192 S 0.0 0.8 0:00 0 bash 4326 user1 16 0 2064 1060 832 R 0.0 0.4 0:00 0 top
Для изменения приоритета процесса используйте команду r.
PID to renice: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME #C COMMAND 4326 user1 16 0 2064 1060 832 R 0.3 0.4 0:00 0 top 4316 user1 15 0 3332 1944 1192 S 0.0 0.8 0:00 0 bash
Программа попросит ввести PID процесса, которому следует изменить приоритет. Введите PID и нажмите Enter.
Renice PID 4326 to value: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME #C COMMAND 4326 user1 16 0 2064 1060 832 R 0.3 0.4 0:00 0 top 4316 user1 15 0 3332 1944 1192 S 0.0 0.8 0:00 0 bash
Теперь программа просит ввести значение, которое будет записано в поле nice. Введем число 10 и нажмем Enter.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME #C COMMAND 4316 user1 15 0 3332 1944 1192 S 0.0 0.8 0:00 0 bash 4326 user1 26 10 2064 1060 832 R 0.0 0.4 0:00 0 top
Значение поля nice изменилось на 10. Соответственно изменилось и значение поля приоритета процесса.
Существуют еще две программы, которые можно использовать для изменения приоритета: nice и renice.