Поиск по сайту:

Как использовать команду ps для мониторинга процессов Linux


Получите снимок процессов, запущенных на вашем компьютере с Linux, с помощью команды ps. Найдите процессы по имени, пользователю или даже терминалу с любой необходимой для вас подробностью. Мы покажем вам, как это сделать.

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

Сердцем всех Linux и Unix-подобных операционных систем является ядро. Среди его многочисленных обязанностей — распределение системных ресурсов, таких как ОЗУ и процессорное время. Их нужно манипулировать в режиме реального времени, чтобы все запущенные процессы получали свою справедливую долю в соответствии с приоритетом каждой задачи.

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

Но, возможно, у вас вообще нет проблем с задачами или производительностью. Возможно, вам просто любопытно, какие процессы выполняются внутри вашего компьютера, и вы хотели бы заглянуть под капот. Команда ps удовлетворяет обе эти потребности. Это дает вам снимок того, что происходит внутри вашего компьютера «прямо сейчас».

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

Список процессов

Самый простой способ использовать ps — запустить его без параметров:

ps

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

Четыре столбца:

  • PID: идентификатор процесса.
  • TTY: имя консоли, на которой зарегистрирован пользователь.
  • ВРЕМЯ: количество процессорного времени, затраченного процессом.
  • CMD: имя команды, запустившей процесс.

Процесс листинга для всех пользователей

добавив -e (выбрать все процессы), мы можем сделать ps список процессов, которые были запущены всеми пользователями, а не только пользователем, который запускает команда ps. Поскольку это будет длинный список, мы передаем его в less.

ps -e | less

Список процессов передается в less.

У нас гораздо больше записей в списке, но мы видим те же четыре столбца, что и раньше. Записи со знаком вопроса ? в столбце TTY не были запущены из окна терминала.

Отображение иерархии процессов

Иногда это может помочь выяснить проблему или идентифицировать конкретный процесс, если вы можете увидеть, какие процессы запустили другие процессы. Для этого мы используем параметр -H (иерархия).

ps -eH | less

Отступ указывает, какие процессы являются родительскими для каких других процессов.

Чтобы добавить немного ясности, мы можем попросить ps добавить несколько строк ASCII и нарисовать иерархию в виде дерева. Это можно сделать с помощью параметра --forest.

ps -eH --forest | less

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

Список процессов по имени

Вы можете направить вывод из ps через grep, чтобы получить список записей, имена которых соответствуют поисковому запросу. Здесь мы ищем записи, соответствующие поисковому запросу «firefox»:

ps -e | grep firefox

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

Отображение дополнительных столбцов в выводе

Чтобы добавить в вывод больше столбцов, используйте параметр -f (полный формат).

ps -ef | less

В вывод ps включается дополнительный набор столбцов.

Столбцы:

  • UID: идентификатор пользователя владельца этого процесса.
  • PID: идентификатор процесса.
  • PPID: идентификатор родительского процесса.
  • C: количество дочерних элементов процесса.
  • ВРЕМЯ: время начала. Время начала процесса.
  • TTY: имя консоли, на которой зарегистрирован пользователь.
  • ВРЕМЯ: количество процессорного времени, затраченного процессом.
  • CMD: имя команды, запустившей процесс.

Используя опцию -F (дополнительный полноформатный формат), мы можем получить еще больше столбцов:

ps -eF | less

Столбцы, которые мы получаем на этот раз, требуют прокрутки экрана вбок, чтобы показать их все.

Нажатие клавиши «Стрелка вправо» сдвигает дисплей влево.

Теперь мы получаем следующие столбцы:

  • UID: идентификатор пользователя владельца этого процесса.
  • PID: идентификатор процесса.
  • PPID: идентификатор родительского процесса.
  • C: количество дочерних элементов процесса.
  • SZ: размер в ОЗУ страниц образа процесса.
  • RSS: размер резидентного набора. Это неподкачиваемая физическая память, используемая процессом.
  • PSR: процессор, которому назначен процесс.
  • ВРЕМЯ: время начала. Время начала процесса.
  • TTY: имя консоли, на которой зарегистрирован пользователь.
  • ВРЕМЯ: количество процессорного времени, затраченного процессом.
  • CMD: имя команды, запустившей процесс.

Список процессов по идентификатору процесса

После того, как вы нашли идентификатор интересующего вас процесса, вы можете использовать его с командой ps, чтобы просмотреть сведения об этом процессе. Для этого используйте параметр -p (выбрать по идентификатору процесса):

ps -p 3403

Детали этого процесса перечислены:

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

Список процессов по командам

Опция -C (команда) позволяет искать процесс по имени команды. То есть имя команды, запустившей процесс. Это немного отличается от командной строки, которая может включать имена путей и параметры или опции.

ps -C shutter

Подробности процесса затвора перечислены.

Список процессов, принадлежащих пользователю

Чтобы просмотреть процессы, принадлежащие конкретному пользователю, используйте параметр -u (список пользователей):

ps -u mary

Отображаются процессы, принадлежащие учетной записи пользователя mary.

Список процессов по терминалу

Чтобы просмотреть процессы, связанные с TTY, используйте параметр -t (выбрать по TTY). Параметр -t, используемый без номера TTY, сообщает о процессах, связанных с текущим окном терминала.

tty
ps -t

Команда tty сообщает, что это псевдотелетайп 0. Все процессы, перечисленные с помощью ps -t, связаны с TTY pts/0.

Если мы передаем номер TTY в командной строке, мы должны получить отчет о процессах, связанных с этим TTY.

ps -t 1

На этот раз все процессы связаны с TTY pts/1.

Выбор столбцов для отображения

С помощью параметра -o (формат) вы можете выбрать, какие столбцы вы хотите включить в вывод из ps. Вы указываете столбцы по имени. (Длинный) список имен столбцов можно увидеть на справочной странице в разделе «Описатели стандартного формата». В этом примере мы выбираем, чтобы процессорное время (pcpu) и командная строка с аргументами (args) включались в вывод.

ps -e -o pcpu,args | less

Вывод включает только два запрошенных нами столбца.

Сортировка вывода по столбцам

Вы можете отсортировать вывод, используя параметр --sort. Отсортируем вывод по столбцу ЦП:

ps -e -o pcpu,args --sort -pcpu| less

Дефис «-» в параметре сортировки pcpu указывает порядок сортировки по убыванию.

Чтобы просмотреть десять процессов, наиболее интенсивно использующих ЦП, передайте вывод с помощью команды head:

ps -e -o pcpu,args --sort -pcpu | head -10

Получаем отсортированный усеченный список.

Если мы добавим больше столбцов к нашему отображению, мы сможем сортировать по большему количеству столбцов. Давайте добавим столбец pmem. Это процент памяти компьютера, который используется процессом. Без дефиса или с плюсом «+» порядок сортировки — возрастающий.

ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10

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

Давайте сделаем его немного более полезным и добавим в столбец идентификатора процесса (pid), чтобы мы могли видеть номер каждого процесса в нашем листинге.

ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10

Теперь мы можем идентифицировать процессы.

Уничтожение процессов по идентификатору процесса

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

Итак, так или иначе, мы можем идентифицировать запущенные процессы. Зная их идентификатор процесса, мы можем (если нужно) убить любой из этих процессов с помощью команды kill. Если бы мы хотели убить процесс 898, мы бы использовали этот формат:

sudo kill 898

Если все идет хорошо, процесс молча завершается.

Уничтожение процессов по имени

Команда pkill позволяет вам убивать процессы по имени. Убедитесь, что вы определили правильный процесс! Эта команда завершит процесс верхнего уровня.

sudo pkill top

Опять же, отсутствие новостей — это хорошая новость. Процесс молча завершается.

Уничтожение нескольких процессов по имени

Если у вас есть несколько запущенных копий процесса или процесс породил несколько дочерних процессов (как это может сделать Google Chrome), как вы можете их убить? Это так же просто. Мы используем команду killall.

У нас есть две копии top running:

ps -e | grep top

Мы можем завершить их обоих с помощью этой команды:

sudo killall top

Отсутствие ответа означает отсутствие проблем, поэтому оба этих процесса были прекращены.

Получите динамический вид с верхним

Вывод из ps представляет собой представление снимка. Он не обновляется. Чтобы получить обновленное представление процессов, используйте команду top. Он обеспечивает динамическое представление процессов, запущенных на вашем компьютере. Дисплей состоит из двух частей. В верхней части экрана есть панель инструментов, состоящая из строк текста, и таблица в нижней части экрана, состоящая из столбцов.

Запустите top с помощью этой команды:

top

Столбцы содержат информацию о процессах:

  • PID: идентификатор процесса
  • ПОЛЬЗОВАТЕЛЬ: имя владельца процесса.
  • PR: приоритет процесса
  • NI: приятная ценность процесса
  • VIRT: виртуальная память, используемая процессом
  • RES: резидентная память, используемая процессом.
  • SHR: общая память, используемая процессом.
  • S: статус процесса. См. приведенный ниже список значений, которые может принимать это поле.
  • %CPU: доля процессорного времени, используемого процессом с момента последнего обновления.
  • %MEM: доля используемой физической памяти
  • ВРЕМЯ+: общее время ЦП, используемое задачей, в сотых долях секунды.
  • КОМАНДА: имя команды или командная строка (имя и параметры командной строки). Если столбец команды не виден, нажмите клавишу «Стрелка вправо».

Статус процесса может быть одним из:

  • D: непрерывный сон
  • R: работает
  • S: спать
  • T: отслеживается (остановлено)
  • Z: зомби

Нажмите клавишу «Q», чтобы выйти из top.

Прежде чем убить процесс

Убедитесь, что это тот, который вам нужен, и убедитесь, что он не вызовет у вас никаких проблем. В частности, стоит проверить параметры -H (иерархия) и --forest, чтобы убедиться, что у него нет важных дочерних процессов, о которых вы забыли. о.

RELATED: Best Linux Laptops for Developers and Enthusiasts