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

ОС Linux состоит из ядра, файловой системы и набора утилит. Управление системой осуществляется с помощью команд, которые запускают программы, тем самым выполняя определённые процессы.
Понятие “процесс” появилось еще во времена разработки ОС Multix и подразумевает программу, которая обрабатывается процессором в конкретный промежуток времени. Грубо говоря, выполнение конкретной задачи любым компонентом ОС Linux можно назвать выполнением процесса.
Каждый процесс имеет свой числовой идентификатор (PID), который не меняется в течение его жизненного цикла.
Модели процессов
Существует две наиболее распространенных модели состояний процессов – модели трех и пяти состояний.
Модель трех состояний
Процессы могут находиться в трех состояниях:
– состояние выполнения
– состояние ожидания
– состояние готовности
Выполнение – активное состояние, при котором процесс получает необходимые ресурсы и выполняется процессором.
Ожидание – пассивное состояние, при котором процесс блокируется, поскольку он ждет какое-либо событие. К примеру, процесс блокируется из-за того, что устройство или файл, к которому запрашивается доступ, занято.
Готовность – также пассивное состояние, но, в отличие от предыдущего состояния, по причинам, не зависящим от процесса.
Одно ядро процессора может выполнять только один процесс в единый момент времени
Процесс выполняется только после состояния готовности. Выходя из состояния выполнения, он может вернуться как в состояние готовности, так и в режим ожидания.
Выполнение процесса может запуститься только после состояния готовности.
Модель пяти состояний
Помимо вышеупомянутых, в эту модель входят еще два состояния: рождение и смерть процесса. В ОС Linux процессы создаются путем копирования уже существующих в результате вызова, который посылают различные программы ядру. После этого процесс переходит в состояние готовности, поскольку может возникнуть ситуация, когда он не может запуститься из-за того, что процессор занят. Если в состоянии рождения самого процесса еще нет, но его структура уже готова, то в состоянии смерти все с точностью наоборот. Структура процесса еще сохраняется в системе, но он уже завершен.
Зомби и демоны
Процессы в состоянии смерти сохраняются в операционной системе в тех случаях, когда родительский процесс, который выполняет сигнал об окончании процесса, завершается раньше дочернего. Процессы такого рода называются «сиротами». Сигналы об их завершении принимает init – прародитель всех процессов – корневой процесс в Unix-системах, который запускает остальные процессы. Иногда даже init по определенным причинам не может завершить процесс-потомок, тогда он получает статус зомби, в списке процессов top высвечивается статус Z. В статусе зомби процессы могут находиться достаточно долгое время. Наличие таких процессов в системе свидетельствует о том, что в системе что-то идет не так.
Еще один особый вид процессов в Linux – демоны. Они работают без вмешательства пользователя в фоновом режиме, обслуживая задачи для других процессов. Такие процессы запускаются без терминала.
Процессы и потоки
Эти понятия хоть далеко не идентичны, однако имеют существенные различия. Каждый процесс имеет отдельное адресное пространство – он располагает только теми данными и ресурсами, которые необходимы ему для выполнения. Для получения доступа к данным другого процесса нужно использовать межпроцессное взаимодействие – файл специального типа, именованный как pipe. Именно такие файлы служат мостом для передачи данных от одного процесса другому.
Потоком называется параллельное выполнение идентичных процессов в системе. При многопоточном выполнении более эффективно используется процессорное время и экономятся накладные расходы. Это достигается за счет того, что на создание и завершение потока требуется меньше времени, чем на те же манипуляции с процессами. Потоки, в отличие от процессов, разделяют между собой все ресурсы, в том числе и адресное пространство, то есть изменения в одном потоке, моментально становятся доступным другим.
Иерархия процессов
В Linux существует разделение процессов на родительские и дочерние. Каждый процесс может иметь только одного родителя и нескончаемое количество потомков. На завершающей стадии загрузки ядра монтируется корневая файловая система, которая формирует среду выполнения нулевого процесса именуемого как swapper. Затем он разветвляется, порождая процесс 1 или init. Тот, в свою очередь, запускает ряд демонов, которые обеспечивают нормальное функционирование процессов в системе: syslogd, xinetd, crond, mingetty, login.
Мониторинг процессов
Команда ps выводит отчет о запущенных в системе процессах.
Чтобы посмотреть все процессы в системе, необходимо ввести
# ps –e
Добавляем опцию –eo и указываем параметры процессов, которые мы ищем
# ps –eo pid,user,cmd
для просмотра, сколько % ЦПУ и памяти занимают запущенные в системе процессы
# ps –u
Приоритет процесса смотрим при помощи команды
# ps –l
Чтобы посмотреть соотношение процессов в системе на уровне «предок-потомок», используем команду
# ps –ef
или идентичную ей команду
# pstree
Top
Эта утилита выводит список всех процессов, запущенных в системе в режиме реального времени.
В первой строке отображается общая информация: время запуска, время работы системы, количество открытых сессий, среднюю загрузку системы. Во второй строке содержится информация об общем количестве процессов в системе, выполняемых, ожидающих событий и остановленных процессов на момент запуска утилиты. Третья строка показывает информацию том, как процессы используют центральный процессор (в процентном соотношении). Четвертая и пятая строки – статистика использования физической оперативной памяти и раздела подкачки. Все остальные строки – список процессов.
Htop
Это более усовершенствованная версия top. В отличие от top, эта утилита показывает список всех процессов в системе по умолчанию, позволяет проводить различные операции (в том числе и групповые) над процессами без ввода PID (уникального идентификатора процесса), менять настройки без перезапуска утилиты, поддерживает мышь, навигацию по списку процессов.
Atop
Работает в двух режимах – сбора данных о процессах и мониторинга системы. В первом режиме работает как демон и через определенный промежуток времени скидывает информацию в файл двоичного формата. Позволяет контролировать загрузку блочных устройств, таких как ОЗУ, ЦПУ, HDD и компьютерной сети.
Iotop
Программа для вывода данных по использованию жёсткого диска. Выводит список процессов, которые используют HDD в момент запуска, показывает загруженность I/O системы в Мб/с.
Lsof
Показывает информацию о том, какие файлы используют процессы. По умолчанию показывает все файлы, используемые процессами на момент запуска.
Управление процессами
Сигналы в Linux-системах – важный элемент межпроцессного взаимодействия, при котором данные передаются между процессами либо между процессами, потоками и ядром. Важная функция сигналов – асинхронное прерывание (в случайное время) одного процесса по запросу ядра или другого процесса. Ядро также использует сигналы для уведомления процессов о системных событиях. C помощью сигналов можно, к примеру, завершать/приостанавливать работу процессов.
Перечень сигналов можно посмотреть командой
# kill –l
Для принудительной остановки процесса служит команда
# kill [сигнал/опция] PID
Для завершения работы процесса используется сигнал SIGTERM, однако он может быть проигнорирован. Для принудительного завершения процесса применяется сигнал SIGKILL. Команда будет выглядеть вот так
# kill SIGKILL PID
# kill -9 PID
Если PID неизвестен, вводим
# ps ux
И получаем информацию по всем запущенным программам.
Если необходимо уничтожить все процессы с указанным именем, используется команда killah. К примеру, чтобы принудительно завершить все процессы веб-сервера Apache, используем команду
# killah httpd
По умолчанию процессы в Linux запускаются в фоновом режиме, однако их можно запустить и без использования терминала. Для этого в конце команды используем знак &.
Для перевода процесса в фоновый режим используется команда bg (background), для возврата в обычный режим «на передний план» – fg (foreground). Список текущих задач, запущенных в фоновом режиме можно просмотреть при помощи команды jobs.
Процессы – важный компонент ОС Linuх. Знание принципов работы процессов и эффективное управление ими – залог отказоустойчивости системы. детально изучаем процессы на курсе «Администрирование Linux. Базовый уровень». Присоединяйтесь!