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

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

Рубрики:

Linux, Ядро

Метки:

, , , , , , ,

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

В этой статье мы расскажем, что такое процессы, какими они бывают и как с ними взаимодействовать в Linux.

Содержание:

  1. Что такое процесс в Linux
    1. Типы процессов
    2. Создание процессов в Linux
  2. Определение идентификатора процесса
  3. Запуск процесса в Linux
  4. Состояния процесса в Linux
  5. Просмотр активных процессов
  6. Отправка сигналов процессам
  7. Изменение приоритета процесса Linux
  8. Выводы

Что такое процесс в Linux

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

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

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

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

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

Создание процессов в Linux

В Linux существует несколько методов создания процессов:

  1. fork() — используется для создания нового процесса путем дублирования существующего. Новый процесс является точной копией родительского, за исключением нескольких значений.
  2. exec() — используется для замены текущего образа процесса на новый. Этот метод позволяет выполнить другую программу в текущем процессе.
  3. system() — создает новый процесс для работы команды, указанной в качестве аргумента. Метод ожидает завершения выполнения команды и возвращает статус ее выхода.
  4. clone() — похож на fork(), но обеспечивает больший контроль над поведением нового процесса. Он позволяет указать различные флаги для управления совместным использованием ресурсов между родительским и дочерним процессами.

Определение идентификатора процесса

Процесс инициализации относится к первому (главному) процессу, который запускается ядром во время загрузки. Он имеет идентификатор PID, равный 1. Его название разнится в зависимости от версии или семейства дистрибутива — init или systemd.

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

 

pidof

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

 

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

 

echo-ppid
Читайте также: Команда vtop для мониторинга процессов и памяти Linux.

 

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

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

 

wget

Фоновые процессы обычно создаются системой или какой-либо программой. Однако, Вы тоже можете их создать. Для этого в конце команды терминала нужно поставить пробел и добавить символ & (амперсанд). И чтобы проверить, что процесс действительно запущен и работает в фоновом режиме, ввести команду jobs:

 

running

Вы также можете останавливать текущие активные процессы. В большинстве случаев это можно сделать, нажав комбинацию клавиш Ctrl + z. Для примера остановим процесс wget и выполним команду jobs:

 

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

 

И чтобы снова вывести процесс на передний план, выполните команду fg вместе с идентификатором %1:

 

jobs-bg-fg
Читайте также: whowatch — мониторинг пользователей и процессов Linux в режиме реального времени.

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

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

  1. Running (R) — непосредственно запущен и активно использует ресурсы процессора.
  2. Uninterruptible Sleep (D) — непрерывно спящее состояние, во время которого процесс ожидает определенного события; такой процесс не реагирует ни на какие сигналы.
  3. Interruptible Sleep (S) — спящее состояние, во время которого процесс может реагировать на посылаемые ему сигналы.
  4. Stopped (T) — состояние, когда процесс был остановлен либо пользователем, либо сигналом.
  5. Zombie (Z) — завершенный процесс, который закончил свое выполнение, но все еще имеет запись в таблице процессов.

Просмотр активных процессов

В операционной системе Linux существует несколько встроенных инструментов для просмотра процессов. Самые известные из них — ps и top.

Чтобы утилита ps вывела на экран все запущенные процессы, введите ее в терминале вместе с опцией -A:

 

ps-A

Утилита top представляет собой инструмент мониторинга, работающий в реальном времени. Для ее использования введите:

 

ps-A

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

Для управления процессами используются сигналы, которые отправляются с помощью команд kill, pkill и killall.  Чтобы узнать все доступные сигналы, введите следующую команду:

 

kill-list

Как Вы можете заметить, у каждого сигнала есть свой номер. По умолчанию утилиты kill, pkill и killall отправляют сигнал SIGTERM (15), предназначенный для завершения процесса.

Для примера, узнаем PID процесса firefox с помощью pgrep и завершим его, используя kill:

 

kill

Читайте также: Мониторинг использования ресурсов Linux и использование ограничений процесса для каждого пользователя — LFCS часть 14.

Чтобы отправить процессу другой сигнал, нужно указать его номер или название вместе с дефисом (-) в качестве аргумента к командам kill, pkill и killall. Для примера отправим процессу firefox сигнал SIGKILL (9):

 

Или:

 

send-signal

Также процесс можно завершить по его названию. Для этого используются команды pkill и killall:

 

pkill

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

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

 

top

Для установки приоритета используется команда nice:

 

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

Выводы

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

Спасибо за время, уделенное прочтению статьи!

Если возникли вопросы — задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасностиполный курс по кибербезопасностикурсы DevNet / DevOps (программируемые системы) от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

Linux, Ядро

Метки:

, , , , , , ,

Больше похожих постов

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

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

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


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню