Управление процессами — это важный аспект системного администрирования, который включает в себя контроль и мониторинг запущенных программ и задач. Понимание того, как работают процессы, необходимо для поддержания работоспособности системы, оптимизации распределения ресурсов и так далее.
В этой статье мы расскажем, что такое процессы, какими они бывают и как с ними взаимодействовать в Linux.
Содержание:
- Что такое процесс в Linux
- Определение идентификатора процесса
- Запуск процесса в Linux
- Состояния процесса в Linux
- Просмотр активных процессов
- Отправка сигналов процессам
- Изменение приоритета процесса Linux
- Выводы
Что такое процесс в Linux
В Linux процесс означает запущенный экземпляр службы, сервиса или утилиты. Он представляет собой выполнение программы и состоит из инструкций, данных и ресурсов. Каждому процессу присваивается уникальный номер (PID), который служит его идентификатором. Процессы могут работать в фоновом режиме (процессы-демоны) или в интерактивном режиме на переднем плане.
Типы процессов
Демон — это тип процесса в Linux, который работает в фоновом режиме без непосредственного взаимодействия с пользователем. В отличие от интерактивных, эти процессы отделены от конкретной пользовательской сессии и продолжают работать, даже если пользователь не вошел в систему. Демоны предназначены для длительного выполнения и часто запускаются при возникновении определенных событий в ОС.
Интерактивный процесс работает на переднем плане и взаимодействует напрямую с пользователем через терминал или другой интерфейс. Такой процесс получает ввод от пользователя и отображает результаты в режиме реального времени. Во время выполнения процесса переднего плана терминал недоступен для других команд или задач.
Родительский процесс — это процесс, который создает другой процесс, известный как дочерний. Соответственно, дочерний процесс — это тот, который создается другим процессом (родительским).
Создание процессов в Linux
В Linux существует несколько методов создания процессов:
fork()
— используется для создания нового процесса путем дублирования существующего. Новый процесс является точной копией родительского, за исключением нескольких значений.exec()
— используется для замены текущего образа процесса на новый. Этот метод позволяет выполнить другую программу в текущем процессе.system()
— создает новый процесс для работы команды, указанной в качестве аргумента. Метод ожидает завершения выполнения команды и возвращает статус ее выхода.clone()
— похож наfork()
, но обеспечивает больший контроль над поведением нового процесса. Он позволяет указать различные флаги для управления совместным использованием ресурсов между родительским и дочерним процессами.
Определение идентификатора процесса
Процесс инициализации относится к первому (главному) процессу, который запускается ядром во время загрузки. Он имеет идентификатор PID, равный 1. Его название разнится в зависимости от версии или семейства дистрибутива — init
или systemd
.
Для определения PID существует утилита pidof
. Чтобы она определила идентификатор процесса, нужно просто указать его название в качестве аргумента команды:
Вы можете определить идентификатор процесса текущей оболочки bash. Для этого введите:
Чтобы узнать идентификатор родительского процесса этой оболочки, выполните команду:
Читайте также: Команда vtop для мониторинга процессов и памяти Linux.
Запуск процесса в Linux
Начнем с интерактивных процессов. Как было сказано ранее, чтобы их запустить нужно выполнить команду в окне терминала. Например, запустим wget
для загрузки файла из Интернета:
Фоновые процессы обычно создаются системой или какой-либо программой. Однако, Вы тоже можете их создать. Для этого в конце команды терминала нужно поставить пробел и добавить символ &
(амперсанд). И чтобы проверить, что процесс действительно запущен и работает в фоновом режиме, ввести команду jobs
:
Вы также можете останавливать текущие активные процессы. В большинстве случаев это можно сделать, нажав комбинацию клавиш Ctrl + z. Для примера остановим процесс wget
и выполним команду jobs
:
Далее можно возобновить процесс в фоновом режиме, используя команду bg
:
И чтобы снова вывести процесс на передний план, выполните команду fg
вместе с идентификатором %1
:
Читайте также: whowatch — мониторинг пользователей и процессов Linux в режиме реального времени.
Состояния процесса в Linux
Все это время, пока мы запускали и останавливали процесс, он менял свое состояние. Всего существует пять возможных статусов процесса:
- Running (R) — непосредственно запущен и активно использует ресурсы процессора.
- Uninterruptible Sleep (D) — непрерывно спящее состояние, во время которого процесс ожидает определенного события; такой процесс не реагирует ни на какие сигналы.
- Interruptible Sleep (S) — спящее состояние, во время которого процесс может реагировать на посылаемые ему сигналы.
- Stopped (T) — состояние, когда процесс был остановлен либо пользователем, либо сигналом.
- Zombie (Z) — завершенный процесс, который закончил свое выполнение, но все еще имеет запись в таблице процессов.
Просмотр активных процессов
В операционной системе Linux существует несколько встроенных инструментов для просмотра процессов. Самые известные из них — ps
и top
.
Чтобы утилита ps
вывела на экран все запущенные процессы, введите ее в терминале вместе с опцией -A
:
Утилита top
представляет собой инструмент мониторинга, работающий в реальном времени. Для ее использования введите:
Отправка сигналов процессам
Для управления процессами используются сигналы, которые отправляются с помощью команд kill
, pkill
и killall
. Чтобы узнать все доступные сигналы, введите следующую команду:
Как Вы можете заметить, у каждого сигнала есть свой номер. По умолчанию утилиты kill
, pkill
и killall
отправляют сигнал SIGTERM (15), предназначенный для завершения процесса.
Для примера, узнаем PID процесса firefox
с помощью pgrep
и завершим его, используя kill
:
Читайте также: Мониторинг использования ресурсов Linux и использование ограничений процесса для каждого пользователя — LFCS часть 14.
Чтобы отправить процессу другой сигнал, нужно указать его номер или название вместе с дефисом (-
) в качестве аргумента к командам kill
, pkill
и killall
. Для примера отправим процессу firefox
сигнал SIGKILL (9):
Или:
Также процесс можно завершить по его названию. Для этого используются команды pkill
и killall
:
Изменение приоритета процесса Linux
Приоритет процесса влияет на количество получаемого им процессорного времени и порядок выполнения. Значение приоритета может быть от 19 (минимальное) до -20 (максимальное). Уменьшать приоритет можно с правами обычного пользователя, но чтобы его увеличить нужны права суперпользователя. Утилита top
, которую мы применяли ранее, позволяет пользователю узнать приоритет каждого процесса — для этого обратите внимание на значение в колонке NI:
Для установки приоритета используется команда nice
:
Чтобы изменить приоритет, выполните команду renice
:
Выводы
Понимание того, как работают процессы, необходимо для эффективного администрирования системы. Мы изучили концепции родительских и дочерних процессов, а также демонов и процессов переднего плана. Вы узнали, как их запускать, останавливать и отслеживать. Кроме того, мы рассказали о приоритетах процессов и о том, как их можно регулировать.
Спасибо за время, уделенное прочтению статьи!
Если возникли вопросы — задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).
Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!
- Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
- Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
- Проведем вечерние онлайн-лекции на нашей платформе.
- Согласуем с вами удобное время для практик.
- Если хотите индивидуальный график — обсудим и реализуем.
- Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
- отредактировать или создать с нуля резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.