лекции, учебные пособия / материалы к собеседованию / nice
.docxnice - запустить программу с измененным приоритетом для планировщика задач
СИНТАКСИС
nice [-n смещение] [-смещение] [--adjustment=смещение] [--help] [--version] [команда [аргумент...]]
ОПИСАНИЕ
Эта страница руководства описывает GNU версию команды nice. Заметьте, что большинство шеллов имеют встроенную команду с тем же именем и со сходной функциональностью.
Если не указано ни одного аргумента, команда nice выводит текущий унаследованный приоритет для планировщика задач. В противном случае nice запускает указанную команду с измененным приоритетом. Если смещение не указано, то приоритет команды увеличивается на 10. Привилегированный пользователь (root) может указать отрицательное смещение. Команда nice может смещать приоритет в диапазоне от -20 (наивысший приоритет) до 19 (низший приоритет) от текущего.
ОПЦИИ
-n смещение, -смещение, --adjustment=смещение
Увеличить приоритет команды на смещение (вместо 10 по умолчанию).
--help
Вывести на стандартный вывод краткую подсказку и успешно завершиться.
--version
Вывести на стандартный вывод информацию о версии и успешно завершиться.
Приоритеты исполнения процесса
Эта тема описывает материал темы 1.103.6 экзамена Junior Level Administration (LPIC-1) 101. Тема имеет вес 3.
В этом разделе вы изучите следующие темы:
Приоритеты исполнения процесса
Установка приоритетов
Изменение приоритетов
Приоритеты
Как мы уже видели в предыдущем разделе, Linux, как и большинство современных операционных систем выполняет множество процессов. Это достигается путем разделения CPU и других ресурсов всеми процессами. Если некоторый процесс может использовать 100% ресурсов CPU, то другие процессы могут перестать отвечать на запросы и вообще что-то делать. Когда мы рассматривали Статус процесса в предыдущем разделе, то видели, что вывод по умолчанию команды top выдает список процессов, расположенных в порядке убывания потребления ресурсов CPU. Если мы запустим наши часы и команду top, то вряд ли увидим этот процесс в списке, потому как большую часть времени он не использует ресурсы CPU.
В вашей системе могут быть команды, которые могут использовать несколько CPU. Это такие программы как видео-редакторы, программы преобразования изображений или же кодирования звука, как например mp3 в ogg.
Мы создадим небольшой сценарий, который использует CPU и делает немного больше. Он принимает два параметра, счетчик и метку. Он выводит метку, текущую дату и время, затем уменьшает счетчик до тех пор, пока не достигнет 0, затем снова печатает метку и дату. Этот сценарий не проверяет ошибки, но зато он подходит для иллюстрации.
Листинг 100. Скрипт, интенсивно использующий CPU
[ian@echidna ian]$ echo 'x="$1"'>count1.sh [ian@echidna ian]$ echo 'echo "$2" $(date)'>>count1.sh [ian@echidna ian]$ echo 'while [ $x -gt 0 ]; do let x=$x-1;done'>>count1.sh [ian@echidna ian]$ echo 'echo "$2" $(date)'>>count1.sh [ian@echidna ian]$ cat count1.sh x="$1" echo "$2" $(date) while [ $x -gt 0 ]; do let x=$x-1;done echo "$2" $(date) |
Если вы запустили этот сценарий на своей системе, то можете увидеть результат как в Листинге 101. Этот сценарий интенсивно использует CPU, как мы скоро увидим. Если вы используете не свою рабочую станцию, убедить что вам можно использовать ресурсы CPU .
Листинг 101. Запуск count1.sh
[ian@echidna ian]$ sh count1.sh 10000 A A Mon Nov 14 07:14:04 EST 2005 A Mon Nov 14 07:14:05 EST 2005 [ian@echidna ian]$ sh count1.sh 99000 A A Mon Nov 14 07:14:26 EST 2005 A Mon Nov 14 07:14:32 EST 2005 |
Пока все хорошо. Давайте теперь используем полученные ранее знания и создадим список команд, давайте запустим сценарий в фоновом режиме работы и используем команду top, чтобы увидеть количество ресурсов CPU, потребляемое сценарием. Список команд показан в Листинге 102, а вывод команды top в Листинге 103.
Листинг 102. Запуск count1.sh и top
[ian@echidna ian]$ (sh count1.sh 99000 A&);top |
Листинг 103. Интенсивное использование CPU
7:20am up 48 days, 20:54, 2 users, load average: 0.05, 0.05, 0.00 91 processes: 88 sleeping, 3 running, 0 zombie, 0 stopped CPU states: 0.1% user, 0.0% system, 0.0% nice, 0.9% idle Mem: 1030268K av, 1002864K used, 27404K free, 0K shrd, 240336K buff Swap: 1052216K av, 118500K used, 933716K free 605152K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 8684 ian 20 0 1044 1044 932 R 98.4 0.1 0:01 sh |
Неплохо. С помощью простого сценария мы заняли 98.4% ресурсов CPU.
|
Отображение и установка приоритетов
Если мы выполняем большую задачу, то можем обнаружить, что она влияет на нашу возможность (или же возможности других пользователей) выполнения других задач в системе. Системы Linux и UNIX используют систему приоритетов из 40 значений, начиная от -20 (наивысший приоритет) и заканчивая 19 (низший приоритет).
nice
Процессы обычных пользователей обычно имеют нулевой приоритет. Команда nice отобразит наш приоритет по умолчанию. Команда ps также может отображать приоритет (nice, или NI, уровень), например с помощью опции -l. Проиллюстрируем на примере Листинга 104, в которым выделен наш приоритет в виде значения 0.
Листинг 104. Отображение информации о приоритетах
[ian@echidna ian]$ nice 0 [ian@echidna ian]$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 000 S 500 7283 7282 0 70 0 - 1103 wait4 pts/2 00:00:00 bash 000 R 500 9578 7283 0 72 0 - 784 - pts/2 00:00:00 ps |
Команда nice также может использоваться для запуска процесса с другим приоритетом. Вы можете использовать опцию -n или (--adjustment) вместе с положительным числом, чтобы увеличить приоритет или отрицательное число, чтобы уменьшить его. Помните, что процесс с наименьшим значением приоритета работает чаще всех, поэтому считайте, что увеличение значения приоритета означает для процесса быть более дружелюбным по отношению к другим процессам. Заметим, что вам обычно требуются права суперпользователя (root), чтобы применять отрицательные значения. Другими словами, обычные пользователи могут только сделать свои процессы более дружелюбными. В Листинге 105, мы запустим две копии сценария count1.sh в фоновом режиме с разными приоритетами исполнения. Заметим, что между окончанием их работы появилась задержка в 5 секунд. Попытайтесь поэкспериментировать с разными значениями nice, или же запустить с другим значением приоритета, чтобы увидеть возможную разницу.
Листинг 105. Использование nice для установки приоритетов
[ian@echidna ian]$ (sh count1.sh 99000 A&);\ > (nice -n 19 sh count1.sh 99000 B&);\ > sleep 2;ps -l;sleep 20 B Mon Nov 14 08:17:36 EST 2005 A Mon Nov 14 08:17:36 EST 2005 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 000 S 500 7283 7282 0 70 0 - 1104 wait4 pts/2 00:00:00 bash 000 R 500 10765 1 84 80 0 - 1033 - pts/2 00:00:01 sh 000 R 500 10767 1 14 79 19 - 1033 - pts/2 00:00:00 sh 000 R 500 10771 7283 0 72 0 - 784 - pts/2 00:00:00 ps A Mon Nov 14 08:17:43 EST 2005 B Mon Nov 14 08:17:48 EST 2005 |
Заметим также, что, как и в команде nohup вы не можете использовать список команд или конвейер как аргумент nice.
|
Изменение приоритетов
renice
Если вы запустили процесс и поняли, что он должен работать с другим приоритетом, то существует способ изменить приоритет работающего процесса с помощью команды renice. Вы указываете абсолютный приоритет (а не величину изменения) процесса или процессов, приоритет которых хотите изменить. Смотри Листинг 106.
Листинг 106. Использование renice для изменения приоритетов
[ian@echidna ian]$ sh count1.sh 299000 A& [1] 11322 [ian@echidna ian]$ A Mon Nov 14 08:30:29 EST 2005
[ian@echidna ian]$ renice +1 11322;ps -l 11322: old priority 0, new priority 1 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 000 S 500 7283 7282 0 75 0 - 1104 wait4 pts/2 00:00:00 bash 000 R 500 11322 7283 96 77 1 - 1032 - pts/2 00:00:11 sh 000 R 500 11331 7283 0 76 0 - 786 - pts/2 00:00:00 ps [ian@echidna ian]$ renice +3 11322;ps -l 11322: old priority 1, new priority 3 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 000 S 500 7283 7282 0 75 0 - 1104 wait4 pts/2 00:00:00 bash 000 R 500 11322 7283 93 76 3 - 1032 - pts/2 00:00:16 sh 000 R 500 11339 7283 0 76 0 - 785 - pts/2 00:00:00 ps |
Больше информации о командах nice и renice вы можете получить из man-страниц.
|
|||||||
|
|||||||
|
Производство серверов Подбор сервера под задачу Он-лайн конфигуратор серверов |
NICE(1)
НАЗВАНИЕ nice - выполнение команды с пониженным приоритетом
СИНТАКСИС
nice [-коэффициент_понижения] команда [аргумент ...]
ОПИСАНИЕ Команда nice выполняет команду с пониженным приоритетом. Коэффициент_понижения задается в диапазоне 1-19 (по умолчанию равен 10).
Суперпользователь может выполнять команды с повышенным приоритетом, для этого нужно указать отрицательный коэффициент_понижения, например --10.
СМ. ТАКЖЕ nohup(1). nice(2) в Справочнике программиста.
КОД ЗАВЕРШЕНИЯ Команда nice возвращает код завершения подчиненной команды.
СЮРПРИЗЫ Коэффициент_понижения, больший 19, принимается равным 19. Если обычный пользователь указывает отрицательный коэффициент_понижения, команда выполняется с нормальным приоритетом.