Nice linux ��� ���

Изучаем команды Linux: nice и renice

1. Введение

Возможность для пользователя задавать значение приоритета его собственных процессов определяет ваше отношение к другим пользователям системы. Даете ли вы им возможность использовать поцессор или просто злоупотребляете системными ресурсами без достаточных оснований? В этой статье вы узнаете, как управлять процессами в плане потребления ими ресурсов процессора и изменения приоритета ваших процессов, используя команды nice и renice. Мы начнем с азов теории, поговорим о том, что такое процесс, планирование, как создать дочерний процесс. Затем мы перейдем к команде nice и узнаем, как изменить значение приоритета процесса.

2. Что такое процесс

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

Ядро Linux позволяет собирать различную информацию о каждом процессе, которая включает, но не ограничивается:

— статус процесса ( работает, спит, зомби или остановлен)
— приоритет выполнения процесса
— информация об используемых ресурсах
— владелец процесса
— сетевые порты и файлы, открытые процессом
— и так далее.

Итак, теперь мы кое-что знаем процессах и можем продвинуться дальше и создать какой-нибудь процесс. Чтобы сделать это, просто откройте терминал и выполните команду yes в фоне, перенаправив ее вывод в /dev/null:

После это воспользуемся командой ps -l, чтобы извлечь информацию о нашем процессе:

Из этой таблицы мы можем узнать немало интересного:

F — FLAG: процесс запущен без привилегий суперпользователя. В противном случае мы могли бы увидеть число 4 или сумму 1 и 4. Подробности можно узнать, посмотрев man-страницу ps.
S — STATE: процесс в настоящее время работает.
UID — ID пользователя, инициализировавшего процесс. UID на самом деле является алиасом EUID (Effective User ID)
PID — ID процесса нашей команды yes 5997.
PPID — Parent Process ID. Это ID родительского для нашей команды yes процесса. В нашем случае это bash с PID 5830.
C — загрузка процессора, целое число, выражается в %.
PRI — Приоритет процесса. Большее значение означает меньший приоритет.
NI — Значение Nice, которое находится в диапазоне от -20 до 19. Большее значение означает меньший приоритет.

2.1. Планирование процессов

Если вы не хотите слишком глубоко вникать в детали планирования и приоритета процессов, то можете пропустить этот раздел. Здесь мы сосредоточимся на описании процессов в Linux и попытаемся обобщить некоторые моменты, так как подробное описание их может занять множество страниц.
С нашей точки зрения необходимо понимать, что принцип работы планировщика Linux (для ядра версии >= 2.6) вытесняющий. Под этим понимается способность ядра выбирать среди всех заданий то, которое имеет наивысший приоритет. Далее, ядро делит списки приоритета на задачи реального времени и пользовательские задания, ранжирующиеся от 1 — 100 и 101 — 140 соответственно.
Далее, ядро Linux выделяет задачам с более высоким приоритетом больший квант времени, а задачам с меньшим приоритетам — меньший квант времени, который в среднем составляет 200 и 10 мс соответственно. Другими словами, каждое задание допускается к выполнению только, если у него остается какая-либо часть времени. Поэтому меньший отрезок времени для выполнения означает, что процесс получает меньше времени в очереди выполнения и, соответственно, получает меньше ресурсов. Когда отрезок времени процесса заканчивается, он помещается в очередь выполнения с истекшим временем, затем его приоритет пересчитывается, и он снова помещается в активную очередь выполнения. Эта зависимость иллюстрируется приведенной здесь диаграммой. Важно помнить, что обе очереди выполнения содержат списки задач, отсортированных по их приоритету.

2.2. Жизненный цикл процесса

Основной принцип управления процессами в Linux включает две важные операции, создающие новый процесс. Операция, при которой процесс копирует себя, и тем самым создает новый процесс с уникальным ID, осуществляется при помощи вызова fork(). За ней часто следует операция exec(), запускающая новую программу. Первый процесс, создающийся при загрузке системы, называется init, он всегда получает PID 1. Все остальные процессы считаются дочерними по отношению к процессу init. В нормальных условиях перед завершением дочернего процесса требуется, чтобы родительский процесс послал ему значение exit. При успешном завершении процесса он отправляет родительскому процессу значение 0. Если по каким-либо причинам дочерний процесс пережил родительский, init отмечает его как не имеющий родителей.

Читайте также:  Failed to mount windows share не могу

3. Использование команды nice

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

Чтобы запустить процесс со значением nice, отличным от 10, можно использовать ключ -n.

Чтобы установить значение nice ниже нуля, требуются права суперпользователя. В противном случае будет установлено значение 0. Ниже мы пробуем задать значение nice -1 без прав root:

Поэтому, чтобы задать значение nice меньше 0, необходимо запускать программу как root, или использовать sudo.

4. Использование команды renice

В предыдущем разделе мы узнали, как запускать программу с заданным значением nice. Теперь мы попробуем изменить значение nice у запущенной программы с помощью команды renice. Итак, у нас есть работающая программа yes со значением nice 10:

Чтобы изменить его значение, мы можем использовать команду renice со значением nice и PID процесса. Давайте изменим значение nice на 15:

Согласно правилам, обычный пользователь может только увеличивать значение nice (уменьшать приоритет) любого процесса. Если попробовать изменить значение nice с 15 до 10, мы получим следующее сообщение об ошибке:

Также, команда renice позволяет суперпользователю изменять значение nice процессов любого пользователя. Это делается с помощью ключа -u. Следующая команда изменяет значение приоритета всех процессов пользователя на -19:

5. Заключение

Команда nice может быть удобным инструментом и она очень проста в использовании. Пожалуйста, отметьте, что для изменения значения приоритета также может использоваться команда top.

Источник

Nice and Renice Command in Linux with Examples

nice command in Linux helps in execution of a program/process with modified scheduling priority. It launches a process with a user-defined scheduling priority. In this, if we give a process a higher priority, then Kernel will allocate more CPU time to that process. Whereas the renice command allows you to change and modify the scheduling priority of an already running process. Linux Kernel schedules the process and allocates CPU time accordingly for each of them.

Working with nice and renice Command

1. To check the nice value of a process.

The eight highlighted value is the nice value of the process.

2. To set the priority of a process

This will set the nice value of the mentioned process.

3. To set the negative priority for a process

This will set the negative priority for the process.

4.changing priority of the running process.

This will change the priority of the process with pid 77982.

5. To change the priority of all programs of a specific group.

This command will set all the processes of gid 4 priority to 10.

6. To change the priority of all programs of a specific user.

This will set all the processes of user 2 to 10.

Источник

Команда nice, или вежливые процессы

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

Команда nice запускает программу с изменённым приоритетом для планироващика задач. Слово «nice» в английском языке обозначает, в частности, «вежливый». По этимологии этой команды процесс с большим значением nice — более вежлив к другим процессам, позволяя им использовать больше процессорного времени, поскольку он сам имеет меньший приоритет (и, следовательно, большее «значение вежливости» — niceness value).

Наибольший приоритет (и наименьшее значение nice) — −20. 19, либо 20 — наименьший приоритет, но это, с другой стороны, самые вежливые процессы.

Чтобы посмотреть идентификатор и значение nice нужного процесса в системе, можно воспользоваться командой ps axl.

Читайте также:  Журнал событий windows как удалить событие

Пример использования команды nice — запуск ресурсоёмкой задачи в фоновом режиме, так, чтобы она выполнялась, но освобождала часть процессорного времени для других процессов, как только оно становятся им нужно. Таким образом можно, скажем, запустить кодирование OGG/MP3 с большим значением nice, чтобы оно происходило в фоновом режиме, используя не всё процессорное время, а то, что не используется другими процессами (с меньшим значением nice — то есть с большим приоритетом).

Чтобы запустить команду с определённым приоритетом, слева нужно добавить «nice -n значение_nice», либо «nice —adjustment значение_nice» (adjustment — настройка, регулировка).

То есть: nice -n значение_nice команда.

Если нужно изменить приоритет уже запущенного процесса, можно воспользоваться командой renice.

renice -n значение_nice id_процесса

Команда renice выводит старый и новый приоритет процесса.

Теперь, зная эти команды, можно управлять процессами так, чтобы определённые задачи выполнялись быстрее в случае, когда сразу много процессов используют всё доступное процессорное время.

Источник

В помощь.

Инструменты пользователя

Инструменты сайта

Содержание

nice и renice. Приоритет выполнения

Введение

Фактор «уступчивости» — это число, по которому ядро определяет свою политику в отношении процессов, конкурирующих за право доступа к центральному процессору. Чем выше фактор уступчивости, тем ниже приоритет процесса и наоборот, отсюда и название термина. Низкое или отрицательное значение означает использование высокого приоритета: процесс ведет себя не слишком уступчиво.

Диапазон допустимых значений фактора уступчивости зависит от используемой системы, и обычно он лежит в пределах от -20 до +19. В некоторых системах используется диапазон такого же размера, но со смещением в область неотрицательных чисел (как правило, от 0 до 39). Диапазоны допустимых значений фактора уступчивости, используемые в наших примерах систем, приведены ниже.

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

Фактор уступчивости никак не влияет на подсистемы управления памятью и вводом-выводом, поэтому даже низкоприоритетный процесс способен монополизировать эти ресурсы или захватить непропорционально большую их часть.

Синтаксис

Описание

Запускает КОМАНДУ с изменённым значением nice, что влияет на приоритет при планировании. Если КОМАНДА не задана, печатает текущее значение nice. Значения nice лежат в диапазоне от -20 (наибольший приоритет) до 19 (наименьший).

Источник

Использование ps, kill и nice для управления процессами в Linux

Published on March 19, 2021

Введение

Сервер Linux, как и любой другой компьютер, использует приложения. Компьютер рассматривает эти приложения как процессы.

Хотя Linux автоматически выполняет все скрытые низкоуровневые задачи жизненного цикла процесса, нам необходим способ взаимодействия с операционной системой для управления на более высоком уровне.

В этом учебном модуле мы расскажем о некоторых простых аспектах управления процессами. Linux предоставляет широкий выбор инструментов для этой цели.

В качестве примера мы используем Ubuntu 12.04 VPS, но любые современные дистрибутивы Linux будут работать аналогичным образом.

Просмотр запущенных процессов в Linux

Чтобы посмотреть, какие процессы запущены на вашем сервере, нужно запустить команду top :

В верхней части подборки приведена статистика по системе, в том числе сведения о нагрузке и общем количестве задач.

Вы можете легко увидеть, что в системе запущен 1 процесс, а 55 процессов находятся в режиме сна (т. е. не активны/не используют ресурсы ЦП).

В нижней части отображаются запущенные процессы и статистика их использования.

В репозиториях доступна улучшенная версия top , которая называется htop . Установите ее с помощью следующей команды:

Если мы запустим команду htop , мы увидим отображение информации в более удобном формате:

Использование ps для вывода перечня процессов

И top , и htop предоставляют удобный интерфейс для просмотра работающих процессов, похожий на графический диспетчер задач.

Однако эти инструменты не всегда достаточно гибкие, чтобы охватывать все сценарии. Решить эту проблему может помочь мощная команда ps .

При вызове без аргументов вывод может быть довольно сжатым:

Вывод показывает все процессы, связанные с текущим пользователем и текущим сеансом терминала. Это имеет смысл, потому что мы запускаем на этом терминале только bash и ps .

Чтобы получить более полное представление о процессах в данной системе, мы можем использовать следующую команду:

Эти опции предписывают ps показать процессы, принадлежащие всем пользователям (вне зависимости от привязки терминала) в удобном формате.

Чтобы посмотреть представление дерева с иллюстрацией иерархических отношений, данную команду можно запустить с этими опциями:

Читайте также:  Драйвера для amd mobility radeon hd 5650 series windows 10

Как видите, процесс kthreadd отображается как родитель процесса ksoftirqd/0 и других процессов.

Примечание об идентификаторах процессов

В системах Linux и Unix каждому процессу назначается идентификатор процесса или PID. Операционная система использует их для идентификации и отслеживания процессов.

Чтобы быстро узнать PID процесса, вы можете использовать команду pgrep :

Эта команда просто запросит идентификатор процесса и выведет его.

Процессу init, который создается первым при загрузке, присваивается PID “1”.

Этот процесс отвечает за создание всех остальных процессов в системе. Последующим процессам присваиваются большие номера PID.

Родитель процесса — это процесс, который отвечает за его создание. Родительские процессы имеют идентификатор PPID, который можно увидеть в заголовках столбцов многих приложений для управления процессами, включая top , htop и ps .

Любое взаимодействие между пользователем и операционной системой, связанное с процессами, включает взаимное преобразование имен процессов и PID. Именно поэтому утилиты сообщают вам PID.

Отношения родительских и дочерних элементов

Создание дочернего процесса осуществляется в два этапа: fork() создает новое адресное пространство и копирует в него ресурсы, принадлежащие родительскому процессу, с помощью copy-on-write; а exec() загружает исполняемый блок в адресное пространство и выполняет его.

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

Отправка сигналов процессам в Linux

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

Отправка сигналов процессам по PID

Наиболее распространенный способ передачи сигналов в программу — использовать команду kill .

Как вы можете догадаться, по умолчанию эта утилита пытается уничтожить процесс:

Она отправляет процессору сигнал TERM. Сигнал TERM просит процесс остановиться. Это позволяет программе выполнить операции по очистке и нормально завершить работу.

Если программа работает неправильно и не завершает работу после получения сигнала TERM, мы можем отправить сигнал более высокого уровня — KILL :

Это специальный сигнал, который не отправляется программе.

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

Каждому сигналу присвоено число, которое можно передать вместо имени. Например, вы можете передать “-15” вместо “-TERM” и “-9” вместо “-KILL”.

Использование сигналов для других целей

Сигналы используются не только для отключения программ. Их также можно использовать для выполнения других действий.

Например, многие демоны перезапускаются при получении сигнала HUP или прекращения работы. Например, так работает Apache.

Получив вышеуказанную команду, Apache перезагрузит файл конфигурации и возобновит вывод контента.

Вы можете вывести список сигналов, которые можно отправлять с помощью kill, используя следующую команду:

Отправка сигналов процессам по имени

Хотя обычно при отправке сигналов используются PID, существуют способы использовать для этой же цели обычные имена процессов.

Команда pkill работает практически точно так же как и kill , но использует имя процесса:

Вышеуказанная команда эквивалентна команде:

Если вы хотите отправить сигнал каждому экземпляру определенного процесса, вы можете использовать команду killall :

Приведенная выше команда отправит сигнал TERM всем экземплярам firefox, запущенным на этом компьютере.

Настройка приоритетов процессов

Часто бывает необходимо изменить приоритет процессов в серверной среде.

Некоторые процессоры могут быть важными, а другие могут выполняться на излишках ресурсов.

Linux контролирует приоритеты с помощью значения вежливости.

Приоритетные задачи считаются менее вежливыми, потому что они вообще не делятся ресурсами. Процессы с низким приоритетом считаются более вежливыми, потому что они используют минимум ресурсов.

Когда мы запускали команду top в начале этого учебного модуля, мы видели столбец “NI”. В этом столбце отображается значение вежливости процесса:

В зависимости от системы, значения вежливости могут различаться от “-19/-20” (наибольший приоритет) до “19/20” (наименьший приоритет).

Чтобы запустить программу с определенным значением вежливости, мы можем использовать команду nice :

Это работает только в начале новой программы.

Чтобы изменить значение вежливости уже выполняемой программы, мы используем инструмент renice :

Примечание. Хотя nice по необходимости использует имя команды, renice вызывает PID процесса.

Заключение

Управление процессами — это тема, которая иногда бывает сложной для новых пользователей, потому что используемые для этой цели инструменты отличаются от аналогичных инструментов с графическим интерфейсом.

Однако все эти идеи знакомы, интуитивно понятны и станут привычными после небольшой практики. Поскольку процессы используются в компьютерных системах повсеместно, умение эффективно управлять ими — критически важный навык.

Источник

Оцените статью