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

ОС Linux состоит из ядра, файловой системы и набора утилит. Управление системой осуществляется с помощью команд, которые запускают программы, тем самым выполняя определённые процессы.

Понятие “процесс” появилось еще во времена разработки ОС Multix и подразумевает программу, которая обрабатывается процессором в конкретный промежуток времени. Грубо говоря, выполнение конкретной задачи любым компонентом ОС Linux можно назвать выполнением процесса.

Каждый процесс имеет свой числовой идентификатор (PID), который не меняется в течение его жизненного цикла.

Модели процессов

Существует две наиболее распространенных модели состояний процессов – модели трех и пяти состояний.

Модель трех состояний

Процессы могут находиться в трех состояниях:

— состояние выполнения

— состояние ожидания

— состояние готовности

Выполнение – активное состояние, при котором процесс получает необходимые ресурсы и выполняется процессором.

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

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

Одно ядро процессора может выполнять только один процесс в единый момент времени

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

Выполнение процесса может запуститься только после состояния готовности.

model-trex-sostoyanij

Модель пяти состояний

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

model-pyati-sostoyanij

Зомби и демоны

Процессы в состоянии смерти сохраняются в операционной системе в тех случаях, когда родительский процесс, который выполняет сигнал об окончании процесса, завершается раньше дочернего. Процессы такого рода называются «сиротами». Сигналы об их завершении принимает init – прародитель всех процессов — корневой процесс в Unix-системах, который запускает остальные процессы. Иногда даже init по определенным причинам не может завершить процесс-потомок, тогда он получает статус зомби, в списке процессов top высвечивается статус Z. В статусе зомби процессы могут находиться достаточно долгое время. Наличие таких процессов в системе свидетельствует о том, что в системе что-то идет не так.

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

Процессы и потоки

Эти понятия хоть далеко не идентичны, однако имеют существенные различия. Каждый процесс имеет отдельное адресное пространство – он располагает только теми данными и ресурсами, которые необходимы ему для выполнения. Для получения доступа к данным другого процесса нужно использовать межпроцессное взаимодействие — файл специального типа, именованный как pipe. Именно такие файлы служат мостом для передачи данных от одного процесса другому.

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

Иерархия процессов

В Linux существует разделение процессов на родительские и дочерние. Каждый процесс может иметь только одного родителя и нескончаемое количество потомков. На завершающей стадии загрузки ядра монтируется корневая файловая система, которая формирует среду выполнения нулевого процесса именуемого как swapper. Затем он разветвляется, порождая процесс 1 или init. Тот, в свою очередь, запускает ряд демонов, которые обеспечивают нормальное функционирование процессов в системе: syslogd, xinetd, crond, mingetty, login.

ierarxiya-processov

Мониторинг процессов

Команда ps выводит отчет о запущенных в системе процессах.

Чтобы посмотреть все процессы в системе, необходимо ввести

# ps –e

Добавляем опцию –eo и указываем параметры процессов, которые мы ищем

# ps –eo pid,user,cmd

для просмотра, сколько % ЦПУ и памяти занимают запущенные в системе процессы

# ps –u

Приоритет процесса смотрим при помощи команды

# ps –l

Чтобы посмотреть соотношение процессов в системе на уровне «предок-потомок», используем команду

# ps –ef

или идентичную ей команду

# pstree

Top

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

top

В первой строке отображается общая информация: время запуска, время работы системы, количество открытых сессий, среднюю загрузку системы. Во второй строке содержится информация об общем количестве процессов в системе, выполняемых, ожидающих событий и остановленных процессов на момент запуска утилиты. Третья строка показывает информацию том, как процессы используют центральный процессор (в процентном соотношении). Четвертая и пятая строки – статистика использования физической оперативной памяти и раздела подкачки. Все остальные строки – список процессов.

Htop

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

htop

Atop

Работает в двух режимах – сбора данных о процессах и мониторинга системы. В первом режиме работает как демон и через определенный промежуток времени скидывает информацию в файл двоичного формата. Позволяет контролировать загрузку блочных устройств, таких как ОЗУ, ЦПУ, HDD и компьютерной сети.

atop

Iotop

Программа для вывода данных по использованию жёсткого диска. Выводит список процессов, которые используют HDD в момент запуска, показывает загруженность I/O системы в Мб/с.

iotop

Lsof

Показывает информацию о том, какие файлы используют процессы. По умолчанию показывает все файлы, используемые процессами на момент запуска.

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. Базовый уровень». Присоединяйтесь!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *