Работа с процессами в Linux

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Управление процессами является неотъемлемой частью администрирования серверных систем под управлением ОС Linux. В этой практической статье мы рассмотрим примеры решения различных задач по управлению процессами.

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

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

Получаем список процессов

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

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

sudo ps -ef

Если необходимо получить информацию по конкретному процессу, то можно воспользоваться командой:

sudo ps -p PID_процесса u

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

pstree -p

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

Приоритетные и фоновые процессы

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

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

Запустить процесс в фоновом режиме очень просто, достаточно добавить знак & после команды:

md5sum /etc/passwd &

После запуска выведется строка с номером задания (в скобках) и PID, появится приглашение на ввод команды в текущем терминале. При этом, номера заданий относятся только к текущему терминалу.

Однако, выполнение этой команды завершится слишком быстро, поэтому для дальнейших примеров я использую скрипт, использующий бесконечный цикл с условием while true…

После запуска в фоновом режиме посмотреть выполнение задание можно с помощью команды jobs:

Приоритетные задачи можно также превращать в фоновые и возвращать обратно в приоритетные.

В качестве примера я снова запущу свой скрипт. Нажатие Ctrl-Z приведет к остановке данного процесса. На рисунке ниже это вывод первой команды jobs. Далее остановленный процесс можно снова запустить в фоновом режиме с помощью команды bg (background). Во втором выводе jobs скрипт запущен со знаком &. И для того, чтобы вернуть процесс в фоновый режим воспользуемся командой fg (foreground).

Вообще, команды fg и bg переводят из/в фоновый режим задание с указанным номером. Но, если номер не указан, действие применяется к последнему созданному заданию, как в нашем случае.

В случае, если нам необходимо завершить процесс, проще всего воспользоваться командой

kill PID_процесса 

Однако возможны ситуации, когда процесс может проигнорировать передаваемый ему командой KILL сигнал SIGTERM и не завершить свою работу. В таком случае мы можем воспользоваться командой:

kill -9 PID_процесса 

В таком случае передается более мощный сигнал SIGKILL, который нельзя проигнорировать или заблокировать. Как жаль, что такой команды нет в Windows.

Виртуальная файловая система procfs

Виртуальная файловая система procfs, как можно понять из названия расположена только в памяти и не хранится на жестком диске постоянно. Доступ к ней можно получить, обратившись к каталогу /proc.

Как можно увидеть, в этом каталоге содержатся подкаталоги, соответствующие PID процессов. У каждого процесса есть своя запись в /proc с идентификатором в названии. В каждом из этих подкаталогов можно найти ряд файлов, связанных с данным процессом.

Вот основные файлы, которые есть в каждом каталоге процесса:

cmdline - полная командная строка процесса.

В примере для демона SSH видим следующее:

cwd - символьная ссылка на текущий каталог процесса.

exe - символьная ссылка на файл, который должен выполняться.

environ - переменные среды процесса.

fd - содержит ссылку на дескрипторы каждого открытого файла.

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

Заключение

В этой статье были рассмотрены практические аспекты работы с процессами в ОС Linux. За рамками этой статьи осталась работа с приоритетами и сигналами и многое другое, что будет рассмотрено в следующей статье.

А на бесплатном уроке специализации Linux мои коллеги из OTUS расскажут про базовые команды в Linux. Зарегистрироваться на вебинар можно по этой ссылке.

Источник: https://habr.com/ru/companies/otus/articles/744902/


Интересные статьи

Интересные статьи

Евгений Шеленков — руководитель Университета Битрикс24 и тимлид команды «Коммуникации в реальном времени». В компании он с 2010 года — и до сих пор относится к работе как к любимому хобби
Приветствую тебя, дорогой читатель в самой первой вводной части серии статей «Приручение черного дракона. Этичный хакинг с Kali Linux». Идеей, побудившей меня к написанию данной серии статей является...
Появилась вчера на Хабре такая вот статья. Когда компания, занимающаяся ИТ-безопасностью заявляет, что spf/dkim/dmarc не работают и существует минимум 18 способов подменить адрес на (вашем!) почтов...
Взлом компьютера, телефона, электроподстанции, беспилотника или даже целого города – кого этим удивишь?Взлом мозгов сотен миллионов людей – вот это впечатляет! США, Великобритания и граждане стра...
В этом руководстве мы рассмотрим создание и монтирование LVM томов на рутованном устройстве Android. Это вторая часть моего проекта «Резервный сервер на Android», но она будет на 80% со...