Ksmd что за процесс linux

Обновлено: 07.07.2024

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

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

В этой статье будет затронута обширная тема, мы рассмотрим такие возможности:

  • Просмотр запущенных процессов
  • Просмотр информации о процессах
  • Поиск процессов в Linux
  • Изменение приоритета процессов
  • Завершение процессов
  • Ограничение памяти доступной процессу

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

Что такое процесс?

Начнем с того, что разберемся в терминах. По сути, процесс - это каждая программа. Как я уже говорил для каждой запускаемой программы создается отдельный процесс. В рамках процесса программе выделяется процессорное время, оперативная память и другие системные ресурсы. У каждого процесса есть свой идентификатор, Proccess ID или просто PID, по ним, чаще всего и определяются процессы Linux. PID определяется неслучайно, как я уже говорил, программа инициализации получает PID 1, а каждая следующая запущенная программа - на единицу больше. Таким образом PID пользовательских программ доходит уже до нескольких тысяч.

На самом деле, процессы Linux не настолько абстрактны, какими они вам сейчас кажутся. Их вполне можно попытаться пощупать. Откройте ваш файловый менеджер, перейдите в корневой каталог, затем откройте папку /proc. Видите здесь кучу номеров? Так вот это все - PID всех запущенных процессов. В каждой из этих папок находится вся информация о процессе.

Например, посмотрим папку процесса 1. В папке есть другие под каталоги и много файлов. Файл cmdline содержит информацию о команде запуска процесса:

Поскольку у меня используется система инициализации Systemd, то и первый процесс запускается для нее. С помощью каталога /proc можно сделать все. Но это очень неудобно, особенно учитывая количество запущенных процессов в системе. Поэтому для реализации нужных задач существуют специальные утилиты. Перейдем к рассмотрению утилит, которые позволяют реализовать управление процессами в Linux.

Управление процессами в Linux

В Linux есть очень большое количество утилит для решения различных задач по управлению процессами. Это и такие многофункциональные решения, как htop, top, а также простые утилиты, например, ps, kill, killall, who и т д. Я не буду рассматривать в этой статье графические утилиты, и top тоже рассматривать не буду. Первое потому что слишком просто, второе - потому что htop лучше. Мы остановимся на работе с программой htop и ее аналогами в форме утилит в стиле GNU, одна утилита - одна функция.

Давайте установим htop, если она у вас еще не установлена. В Ubuntu это делается так:

sudo apt install htop

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

Посмотреть запущенные процессы

Это очень простая задача, и также просто она решается. Для этого существует множество утилит, начиная от обычной ps, до более продвинутых интерактивных top, htop и так далее.

Открыв htop, мы сразу видим список запущенных процессов. Конечно, здесь отображены не все процессы linux, их-то в системе очень много, вы уже знаете, все они на один экран не поместятся. По умолчанию выводятся процессы, запущенные от имени вашего пользователя:

htop

Вы можете увидеть такую информацию о процессе:

  • PID - идентификатор процесса
  • USER - пользователь, от которого был запущен процесс
  • PRI - приоритет процесса linux на уровне ядра (обычно NI+20)
  • NI - приоритет выполнения процесса от -20 до 19
  • S - состояние процесса
  • CPU - используемые ресурсы процессора
  • MEM - использованная память
  • TIME - время работы процесса

К отображению можно добавить и дополнительные параметры, но эти главные. Добавить параметры можно с помощью меню Setup. Там все очень просто, читайте подсказки и следуйте указаниям. Например, добавлен параметр PPID:


Очень важной особенностью программы есть то, что вы можете сортировать процессы в Linux по нужному параметру. Просто кликните по названию параметра, оно выделится зеленым и будет выполнена сортировка. Например, хотите посмотреть в каком порядке запускались процессы, сортируем по PID:

htop2

Также есть интересная возможность разместить процессы в виде дерева. Вы сможете увидеть, каким процессом был запущен тот или иной процесс. Для отображения дерева нажмите кнопку F5:

htop3

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

ps

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

  • -e - вывести информацию обо всех процессах
  • -a - вывести информацию обо всех наиболее часто запрашиваемых процессах
  • -t - показывать только процессы из этого терминала
  • -p - показывать информацию только об указанном процессе
  • -u - показывать процессы только определенного пользователя

Одним словом, чтобы посмотреть все активные на данный момент процессы в linux, используется сочетание опций aux:

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

Список будет отсортирован в обратном порядке, внизу значения больше, вверху - меньше. Если нужно в обратном порядке, добавьте минус:

ps1

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

Казалось бы, у ps нет возможности стоить деревья процессов. Но не совсем, для этого существует отдельная команда:

pstree

Поиск процессов в Linux

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

Чтобы найти процесс linux в htop можно использовать кнопку F3. Нажмите F3 и наберите нужное слово. Дальше чтобы перейти к следующему вхождению нажимайте F2 или Esc для завершения поиска:

htop4

Для поиска процессов в htop можно использовать также фильтр htop. Нажмите F4, введите слово и будут выведены только процессы linux, имя которых включает это слово.

htop6

В утилите ps фильтрации нет, но зато мы можем использовать утилиту grep, перенаправив вывод ps на нее чтобы найти процесс linux:

ps aux | grep chromium

Это очень часто употребляемая команда.

Изменение приоритета процессов

Приоритет процесса linux означает, насколько больше процессорного времени будет отдано этому процессу по сравнению с другими. Так мы можем очень тонко настроить какая программа будет работать быстрее, а какая медленнее. Значение приоритета может колебаться от 19 (минимальный приоритет) до -20 - максимальный приоритет процесса linux. Причем, уменьшать приоритет можно с правами обычного пользователя, но чтобы его увеличить нужны права суперпользователя.

В htop для управления приоритетом используется параметр Nice. Напомню, что Priv, это всего лишь поправка, она в большинстве случаев больше за Nice на 20. Чтобы изменить приоритет процесса просто установите на него курсор и нажимайте F7 для уменьшения числа (увеличения приоритета) или F8 - для увеличения числа.

Но и для решения этой задачи управления процессами Linux необязательно использовать htop. Вы можете сделать все и другими командами. Например, команда nice. С помощью нее вы можете указать приоритет для запускаемого процесса:

nice -n 10 apt-get upgrade

Или изменить приоритет для уже существующего по его pid:

renice -n 10 -p 1343

Завершение процессов в Linux

Если процесс завис и не отвечает, его необходимо завершить. В htop, чтобы убить процесс Linux, просто установите курсор на процесс и нажмите F9:

htop7

Система для управления процессами использует определенные сигналы, есть сигналы, которые указывают процессу завершиться. Вот несколько основных сигналов:

  • SIGTERM - попросить процесс сохранить данные и завершится
  • SIGKILL - завершить процесс немедленно, без сохранения

Вообще сигналов есть несколько десятков, но мы не будем их рассматривать. Отправим сигнал SIGKILL:

Также можно воспользоваться утилитой kill:

Также можно уничтожить процесс по имени:

Ограничение процессов

Управление процессами в Linux позволяет контролировать практически все. Вы уже видели что можно сделать, но можно еще больше. С помощью команды ulimit и конфигурационного файла /etc/security/limits.conf вы можете ограничить процессам доступ к системным ресурсам, таким как память, файлы и процессор. Например, вы можете ограничить память процесса Linux, количество файлов и т д.

Запись в файле имеет следующий вид:

<домен> <тип> <элемент> <значение>

  • домен - имя пользователя, группы или UID
  • тип - вид ограничений - soft или hard
  • элемент - ресурс который будет ограничен
  • значение - необходимый предел

Жесткие ограничения устанавливаются суперпользователем и не могут быть изменены обычными пользователями. Мягкие, soft ограничения могут меняться пользователями с помощью команды ulimit.

Рассмотрим основные ограничения, которые можно применить к процессам:

  • nofile - максимальное количество открытых файлов
  • as - максимальное количество оперативной памяти
  • stack - максимальный размер стека
  • cpu - максимальное процессорное время
  • nproc - максимальное количество ядер процессора
  • locks - количество заблокированных файлов
  • nice - максимальный приоритет процесса

Например, ограничим процессорное время для процессов пользователя sergiy:

sergiy hard nproc 20

Посмотреть ограничения для определенного процесса вы можете в папке proc:

Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 204800 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 23562 23562 processes
Max open files 1024 4096 files
Max locked memory 18446744073708503040 18446744073708503040 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 23562 23562 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us

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

Вот опции команды:

  • -S - мягкое ограничение
  • -H - жесткое ограничение
  • -a - вывести всю информацию
  • -f - максимальный размер создаваемых файлов
  • -n - максимальное количество открытых файлов
  • -s - максимальный размер стека
  • -t - максимальное количество процессорного времени
  • -u - максимальное количество запущенных процессов
  • -v - максимальный объем виртуальной памяти

Например, мы можем установить новое ограничение для количества открываемых файлов:

Установим лимит оперативной памяти:

ulimit -Sv 500000

Напоминаю, что это ограничение будет актуально для всех программ, выполняемых в этом терминале.

Выводы

Вот и все. Теперь управление процессами в Linux не вызовет у вас проблем. Мы рассмотрели очень даже подробно эту тему. Если у вас остались вопросы или есть предложения по дополнению статьи, пишите в комментариях!

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


Рисунок 1. Сервис KSM

Данная возможность полезна при виртуализации с использованием KVM. Гостевая виртуальная машина при запуске наследует только память от родительского процесса qemu-kvm . После того, как гостевая виртуальная машина запущена, содержимое образа её операционной системы можно разделить с другими гостевыми машинами, которые используют такую же операционную систему или те же приложения. KSM определяет и объединяет только те страницы памяти, которые не влияют на работу гостевой виртуальной машины и не компрометируют безопасность как физической машины-гипервизора, так и других гостевых машин. KSM позволяет KVM требовать, чтобы идентичные области памяти гостевых виртуальных машин были общими. Экспериментальная реализация KSM от Red Hat показала, что 52 виртуальных экземпляра Windows XP с 1 Гб памяти могут работать на компьютере с 16 Гб оперативной памяти.

KSM и NUMA

Начиная с Red Hat Enterprise Linux 6.5, KSM работает с NUMA (Non-Uniform Memory Access). Данная возможность позволяет KSM при объединении страниц принимать в расчёт топологию NUMA. Это предотвращает случаи, когда страницы размещаются на удалённых узлах, и связанные с удалённым размещением проблемы производительности.

Red Hat рекомендует не выполнять объединение одинаковых страниц, если эти страницы находятся на разных узлах NUMA. Для этого необходимо установить настраиваемый параметр /sys/kernel/mm/ksm/merge_nodes в 0 . Почему? Внутренние счетчики ядра могут начать противоречить друг другу после большого количества межузловых слияний. В результате, демон numad может запутаться. Если ваша система имеет большое количество свободной памяти, можно достичь более высокой производительности за счет отключения и деактивации демона KSM. Обратитесь к Руководству по настройке производительности Red Hat Enterprise Linux для получения дополнительной информации о NUMA.

Сервисы KSM

Для управления KSM в Red Hat Enterprise Linux есть два сервиса:

  • Сервис ksm запускает и останавливает тред KSM ядра.
  • Сервис ksmtuned контролирует сервис ksm , динамически управляя слиянием страниц. Сервис ksmtuned запускает сервис ksm и останавливает его, если памяти и так достаточно. Для поднастройки KSM, например, когда создаётся или уничтожается гостевая машина, следует вызвать service ksmtuned retune .

Оба этих сервиса контролируются с помощью стандартных инструментов управления сервисами.

Сервис KSM

Сервис ksm входит в состав пакета qemu-kvm . По умолчанию KSM отключен в Red Hat Enterprise Linux 6. Однако, при использовании Red Hat Enterprise Linux 6 в качестве хоста KVM, он, как правило, включается сервисами ksm и ksmtuned .

Когда сервис ksm не запущен, KSM использует не более 2000 разделяемых страниц. Значение по умолчанию невелико и даёт лишь незначительный выигрыш в сохранении памяти.

Когда же сервис ksm запущен, то KSM будет разделять до половины основной памяти системы той физической машины, на которой он размещён. Запустите сервис ksm , чтобы KSM использовал больше разделяемых страниц памяти.

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

Сервис настройки KSM

У сервиса ksmtuned нет никаких опций. Сервис ksmtuned зацикливает и регулирует ksm . Сервис ksmtuned уведомляется процессом libvirt , когда создаётся или уничтожается гостевая виртуальная машина.

Если вызвать service ksmtuned retune , сервис ksmtuned перечитает конфигурационный файл и перезапустит настройку. Перед тем, как приступить к описанию параметров в файле, необходимо прояснить термины:

  • npages — сколько страниц ksm будет сканировать до того, как ksmd уйдёт в спящий режим, устанавливается в /sys/kernel/mm/ksm/pages_to_scan ;
  • rsz — сумма памяти всех процессов qemu-kvm , в Кбайтах;
  • thres — порог активации, в Кбайтах; цикл KSM срабатывает, когда сумма thres + rsz превышает общий объём системной памяти.

Файл /etc/ksmtuned.conf является конфигурационным файлом для сервиса ksmtuned . Ниже представлено содержимое файла ksmtuned.conf по умолчанию (с переведенными для удобства русскоязычного читателя комментариями).

Переменные KSM и мониторинг

KSM сохраняет данные мониторинга в директории: /sys/kernel/mm/ksm/ . Файлы в этой директории обновляются ядром и представляют точную картину использования KSM. Каждый из следующих файлов содержит одно числовое значение, позволяющее определить текущий статус сервиса:

  • full_scans — число запусков полного сканирования;
  • pages_shared — общее количество слитых страниц;
  • pages_sharing — число слитых страниц на текущий момент.
  • pages_to_scan — число страниц, которые еще не были просканированы;
  • pages_unshared — общее число слитых страниц, которые разделили в связи с записью новых данных;
  • pages_volatile — число слитых страниц, которые был разделены, на текущий момент;
  • run — запущен ли сервис KSM;
  • sleep_millisecs — сколько миллисекунд KSM ожидает следующего запуска.

Результаты деятельности по настройке KSM сохраняются в лог /var/log/ksmtuned , если строка DEBUG=1 добавлена в файл /etc/ksmtuned.conf . Местоположение лог-файла можно изменить с помощью параметра LOGFILE . Изменение местоположения лог-файла не рекомендуется и может потребовать особой конфигурации SELinux.

Остановка KSM

KSM снижает производительность, что может оказаться важным, например, при недостаточной мощности процессора. Этот сервис можно деактивировать, остановив сервисы ksmtuned и ksm . Остановка сервисов деактивирует KSM до момента перезагрузки.

Чтобы деактивировать KSM с сохранением этого статуса после перезагрузки, используйте команду chkconfig :

Не экономьте на файле подкачки

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


На proxmox при 4-5 машинах ksm гигов 5 экономит.


Оффтоп. На esx(i) это было уже давно, включалось автоматом при нехватке памяти, особой пользы не приносило, в последних версиях по дефолту отключено.

На proxmox при 4-5 машинах ksm гигов 5 экономит.

Неплохо. А сколько всего памяти на системе и сколько выделено под каждую ВМ?

И сколько процессора жрал ksmd? Я надеюсь, что ksm сможет освободить память под что-нибудь более полезное (кеши ФС, например) и общая производительность немного вырастет.

Оффтоп. На esx(i) это было уже давно, включалось автоматом при нехватке памяти, особой пользы не приносило, в последних версиях по дефолту отключено.

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


Общей памяти 32 гига. Машине в среднем 4 гига отведено. Сколько оно ест цпу я не мерил.


Проверял в ноябре 2011г., на физическом сервере с 32 ГиБ ОЗУ, RHEL 6.1.

Были запущены 64 экземпляра windows xp, RAM 512 МиБ, базовый дисковый образ 4 ГиБ.

Реальное использование памяти виртуальными машинами через несколько минут после запуска последней ВМ составило 6 ГиБ.


Оффтоп. На esx(i) это было уже давно, включалось автоматом при нехватке памяти, особой пользы не приносило, в последних версиях по дефолту отключено.

Вы с ballooning-ом не путаете?


Наоброт, очень хотел задать вопрос про балунинг roman77, т.к. цифра 5 Гб с 5 работающих ВМ за счёт shared выгдядит фантастической.


ого. А когда вышел Vsphere 6?


хорошо оно работает, но жрет процессор. в oVirt KSM запускается автоматически, когда хост доходит до 80% занятой памяти, пробегается разок, и отключается. График утилизации памяти на хостах выглядит как плавный подъем до 80%, и резкий сброс назад к 30-40% каждые N часов. Крупный виндовый VDI если что.

Процесс — это экземпляр запущенной программы. Всякий раз, когда в терминале выполняется какая-нибудь команда (например, команда pwd ), система создает/запускает новый процесс.

Типы процессов

В Linux существует три основных типа процессов:

Как Linux идентифицирует процессы?

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

Родительские процессы — это процессы, которые во время своего выполнения создают другие процессы.

Дочерние процессы — эти процессы, создаваемые другими процессами во время своего выполнения.

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

Состояния процесса в Linux


Рассмотрим основные состояния процесса:

Выполнение — процесс либо запущен (текущий процесс в системе), либо готов к запуску (ожидает передачи на выполнение процессору).

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

прерываемые ожидающие процессы — могут быть прерваны сигналами;

непрерываемые ожидающие процессы — процессы ожидают непосредственно на аппаратном уровне и не могут быть прерваны каким-либо событием/сигналом.

Завершен — процесс был остановлен, как правило, путем получения сигнала штатного завершения работы exit().

Как получить идентификатор (PID) процесса

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

$ pidof init
$ pidof bash
$ pidof systemd


Примечание: На вышеприведенном скриншоте вы можете видеть, что процессу init назначен PID=1 , а процессу systemd — PID=881 , хотя системой инициализации в Debian является именно systemd. Детально о том, почему возникла такая путаница, читайте здесь.

Чтобы вывести PID и PPID текущей оболочки, выполните:

$ echo $$
$ echo $PPID



Запуск интерактивного процесса в Linux

Как только вы выполните какую-нибудь команду или программу (например, firefox ), она создаст в системе соответствующий процесс. Вы можете запустить процесс переднего плана (он будет подключен к терминалу, ожидая пользовательского ввода) следующим образом:



Запуск фонового процесса в Linux

Запуск процесса в фоновом режиме полезен только для программ, которые не нуждаются в пользовательском вводе (через оболочку). Перевод задания в фоновый режим обычно выполняется, когда ожидается, что выполнение задания займет много времени.

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

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




Отслеживание активных процессов

Существует несколько различных инструментов для просмотра/перечисления запущенных в системе процессов. Двумя традиционными и хорошо известными из них являются команды ps и top:

Команда ps

Отображает информацию об активных процессах в системе, как показано на следующем скриншоте:


Для получения дополнительной информации о процессах, запущенных текущим пользователем, применяется опция -f :


Столбцы, присутствующие в выводе команды ps , имеют следующие значения:

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

PID — идентификатор процесса.

PPID — идентификатор родительского процесса.

C — загрузка CPU процессом.

STIME — время начала выполнения процесса.

TTY — тип терминала, связанного с процессом.

TIME — количество процессорного времени, потраченного на выполнение процесса.

CMD — команда, запустившая этот процесс.

Также можно отобразить информацию по конкретному процессу, используя команду ps -f [PID] , например:


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

-a — показывает информацию о процессах по всем пользователям;

-x — показывает информацию о процессах без терминалов;

-u — показывает дополнительную информацию о процессе по заданному UID или имени пользователя;

-e — отображение расширенной информации.

Если вы хотите вывести вообще всю информацию по всем процессам системы, то используйте команду ps –aux :


Обратите внимание на выделенный заголовок. Команда ps поддерживает функцию сортировки процессов по соответствующим столбцам. Например, чтобы отсортировать список процессов по потреблению ресурсов процессора (в порядке возрастания), введите команду:

$ ps -aux --sort=%cpu


Если вы ходите выполнить сортировку по потреблению памяти (в порядке убывания), то добавьте к имени интересующего столбца знак минуса:

$ ps -aux --sort=-%mem


Еще один очень популярный пример использования команды ps — это объединение её и команды grep для поиска заданного процесса по его имени:

$ ps -aux | grep bash



Команда top

Команда top отображает информацию о запущенных процессах в режиме реального времени:


PID — идентификатор процесса.

USER — пользователь, которому принадлежит процесс.

PR — приоритет процесса на уровне ядра.

NI — приоритет выполнения процесса от -20 до 19 .

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

RES — текущий объем (в килобайтах) физической памяти процесса.

SHR — объем совместно используемой с другими процессами памяти.

%CPU — процент используемых ресурсов процессора.

%MEM — процент используемой памяти.

TIME+ — количество процессорного времени, потраченного на выполнение процесса.

COMMAND — имя процесса (команды).

< — процесс с высоким приоритетом;

N — процесс с низким приоритетом;

l — многопоточный процесс;

s — лидер сессии.

Примечание: Все процессы объединены в сессии. Процессы, принадлежащие к одной сессии, определяются общим идентификатором сессии — идентификатором процесса, который создал эту сессию. Лидер сессии — это процесс, идентификатор сессии которого совпадает с его идентификаторами процесса и группы процессов.

Команда glances

Команда glances — это относительно новый инструмент мониторинга системы с расширенными функциями:

Примечание: Если в вашей системе отсутствует данная утилита, то установить её можно с помощью следующих команд:

$ yum install -y glances

$ sudo apt-get update
$ sudo apt-get install glances

Управление процессами в Linux

Также в Linux присутствуют некоторые команды для управления процессами:

kill — посылает процессу сигнал завершения работы;

pkill — завершает процесс по его имени;

pgrep — ищет процесс по его имени (и, опционально, по имени запустившего его пользователя);

killall — завершает все активные процессы.

Ниже приведены несколько основных примеров их использования:

$ pgrep -u diego firefox
$ kill 6516
$ pgrep -u diego firefox
$ pgrep -u diego glances
$ pkill glances
$ pgrep -u diego glances



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

Основополагающим способом управления процессами в Linux является отправка им соответствующих сигналов. Для перечисления списка всех доступных сигналов, введите команду:


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

SIGHUP (1) — отправляется процессу, когда его управляющий терминал закрыт.

SIGINT (2) — отправляется процессу управляющим терминалом, когда пользователь прерывает процесс нажатием клавиш Ctrl+C.

SIGQUIT (3) — отправляется процессу, если пользователь посылает сигнал выхода Ctrl+D.

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

SIGTERM (15) — сигнал завершения программы (отправляется командой kill по умолчанию).

SIGTSTP (20) — отправляется процессу управляющим терминалом с запросом на остановку; инициируется пользователем нажатием клавиш Ctrl+Z.

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

$ kill -SIGKILL 2275

Чтобы убить приложение, используя его имя, применяются команды pkill или killall , например:

Изменение приоритета процесса

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

Узнать значение приоритета команды можно по выводу команды top (столбец NI):


Используйте команду nice , чтобы задать NI-значение для запускаемого процесса. Имейте в виду, что обычные пользователи могут задавать данный параметр в диапазоне от 0 до 20 тем процессам, которыми они владеют. Только пользователь root может использовать отрицательные значения приоритета.

Чем больше nice-значение, тем меньшим приоритетом будет обладать процесс. Например, вы можете задать приоритет для запускаемого процесса следующим образом:

$ nice -n 10 firefox

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

$ renice +8 5547
$ renice +8 1151

На данный момент это всё! Если у вас есть какие-либо вопросы или дополнительные идеи, вы можете поделиться ими с нами с помощью комментариев.

Favorite

Добавить в избранное

Как управлять процессами в Linux

П роцесс является абстракцией, используемый операционной системой Linux, чтобы представить работающую программу. Каждый процесс в Linux состоит из адресного пространства и набора структур данных в ядре сервера. Адресное пространство содержит код и библиотеки, когда процесс выполняется, переменные процесса, ее стеки и другую дополнительную информацию, необходимую для ядра в то время как процесс запущен.
  1. PID представляет собой уникальный идентификационный номер с именем и назначается ядром для каждого процесса. PID присваиваются в порядке, как создаются процессы.
  2. UID является номер идентификации пользователя, который его создал.
  3. EUID является «эффективным» идентификатором пользователя, используемый для определения, какие ресурсы и файлы процесса имеют разрешение на доступ в любой данный момент. В общем, UID и EUID одни и те же, за исключением программ, которые являются setuid исключением.
  4. GID это группа идентификационных номеров процесса. EGID связана с GID таким же образом, как EUID связана с UID. Короче говоря, процесс может быть членом многих групп одновременно.

Ниже перечислены некоторые основные команды для управления процессами в Linux:

Процесс утверждает коды:

Вот пример вывода ps aux на CentOS 7 VPS:

Синтаксис команды kill:

Kill без номера сигнала не гарантирует, что этот процесс будет закрыт, потому что сигнал TERM может быть пойман, заблокирован или проигнорирован.

Команда ‘kill -9 pid’ ‘гарантирует’ уничтожение процесса, потому что сигнал 9, kill, не может быть перехвачен. Командой killall убивают процессы по имени. Например, следующая команда убивает все процессы Dovecot:

Как управлять процессами в Linux

PS . Если вам понравился этот пост, можете поделиться им с друзьями в социальных сетях с помощью социальных сетей или просто оставить комментарий ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: