Одной из частых задач системного администратора Линукс-сервера является просмотр запущенных процессов. Поэтому расскажу про то, как эти процессы смотреть и что делать с информацией о том, что запущено на сервере.
Напоминаю, что другие полезные материалы по теории и практике Linux вы можете найти в специальном разделе на канале.
Кратко про то, что такое процесс
Если очень-очень сильно упростить теорию, то процессом мы можем назвать всякую выполняющуюся программу в Linux. Иногда говорят, что процесс это не просто сама программа, а «ее экземпляр, запущенный в отдельном виртуальном адресном пространстве», но мне проще представлять себе процесс просто в роли программы.
Состояние процесса можно описать тремя моделями:
- выполнения
- ожидания
- готовности
Выполнение это состояние, при котором процесс обладает всеми нужными ему ресурсами и непосредственно выполняется (используется) процессором. Во время ожидания процесс заблокирован, так как ожидает какое-либо событие, например ввод данных или свободного для взаимодействия устройства. В состоянии готовности процесс тоже заблокирован, но по каким-то внешним причинам (например, процессор переключился на другой процесс, но при этом наш процесс уже готов к выполнению, нужны лишь ресурсы). Если дополнить эту модель еще двумя состояниями - создание (рождение) и завершение (смерть), то получится привычный жизненный цикл процесса в Linux (в общем, все как у людей).
После создания и до момента завершения процессы выстраиваются в виде дерева, на вершине которого всегда находится процесс под названием init (про него мы поговорим в одной из следующих заметок).
Мне кажется, что этот самый минимум информации, которого достаточно, чтобы понять процессы, перейдем к моей любимой практике.
Утилита ps
Для просмотра системных процессов используется утилита (и одноименная команда) ps, образованная от слов «process status». Она идет по-умолчанию во всех дистрибутивах Linux, поэтому никаких дополнительных телодвижений в плане установки делать не нужно. Просто в терминале вводим две буквы ps
Как-то маловато, не находите? На самом деле, команда, введенная без ключей показывает процессы своего пользователя привязанные к текущему терминалу. Но на основе «выхлопа» выше мы сразу познакомимся с полями, которые показаны.
- Первый столбец (PID) - идентификатор процесса (говоря проще номер)
- Второй столбец (TTY) - наименование виртуального терминала, к которому прикреплён процесс.
- Третий столбец (TIME) - процессорное время, затраченное процессом.
- Четвертый столбец (CMD) - приложение, которое запустило процесс.
Ключи для использования с ps
Использование ключе -e выведет список всех процессов, которые запущены на сервере.
При вводе команды с ключом -e мы не увидим состояние процесса. Чтобы расширить перечень информации используем ключ u.
Теперь видим, что у нас добавились столбцы, которые выводят имя пользователя (USER), запустившего процесс, процент процессорного времени которое было потрачено на выполнение процесса с момента его запуска (%CPU), долю физической памяти, занятой процессом( %MEM), время запуска процесса (START) и его состояние (STAT). Подробнее про эти показатели вы можете прочитать в справочной литературе или статьях в интернете, в рамках этой статьи не хочу вновь углубляться в теорию.
Самым часто используемым набором ключей является aux. Попробуем ввести в терминал ps aux.
Ключ а покажет процессы всех пользователей, про u мы уже знаем, x выведет процессы которые запускаются во время загрузки и работают в фоновом режиме.
Работа с конкретными процессами
Использование ключа -p и последующее указание идентификатора процесса (PID) выведет информацию только о выбранном процессе. Попробуем вывести все, что можно про самый первый процесс - с PID 1.
ps u -p 1
Если указать ключ -u и имя пользователя, то можно вывести процессы запущенные только им, а использование -g позволяет вывести процессы, запущенные группой пользователей.
ps u -u root
ps u -g root
Ну, и наконец, можно вывести процессы, которые были запущены конкретной программой. В теории есть такое понятие, как «лидер» - это процесс, который запускает другие. Например, таким лидером может быть php, сервер apache или nginx. Использование ключа -C позволит вам посмотреть какие процессы запустила та или иная программа.
Как видим, некоторые программы имеют запущенные собой процессы, а у некоторых программ процессов просто-напросто нет.
Подведем итог
В примерах выше я показал лишь те вариации использования ps, которые на постоянной основе использую сам. Утилита имеет большое количество вариантов комбинирования ключей для более точного вывода информации о запущенных на сервере процессах. Помним, что познакомиться с руководством по использованию программы в Linux можно при помощи использования команды man. Так если ввести man ps, то в «выхлопе» будет отображена вся полезная информация. Чтобы выйти из руководства нажмите клавишу q.
Ну и может быть опытные подписчики и читатели в комментариях дадут обратную связь и поделятся другими полезными ключами и их комбинациями при использовании ps.
Напоминаю, что алгоритмы Яндекса любят проявление активности в постах, потому жду от вас лайков, комментариев и репостов. Тем, кто не подписан на канал и его обновления в Телеграме нужно срочно исправить это упущение и подписаться.