Главная >> Команды >> Команда ps в Linux

Команда ps в Linux

Утилита ps одна из самых простых и в то же время часто используемых программ для просмотра списка процессов в Linux. Она не поддерживает интерактивный режим, зато имеет множество опций для настройки вывода тех или иных параметров процессов в Linux.

В этой статье мы рассмотрим как пользоваться ps, что с помощью неё можно посмотреть, а также какие основные опции можно использовать.


Содержание статьи

Что такое процесс?

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

Каждый из процессов может находиться в одном из таких состояний:

  • Запуск - процесс либо уже работает, либо готов к работе и ждет, когда ему будет дано процессорное время;
  • Ожидание - процессы в этом состоянии ожидают какого-либо события или освобождения системного ресурса. Ядро делит такие процессы на два типа - те, которые ожидают освобождения аппаратных средств и приостановление с помощью сигнала;
  • Остановлено - обычно, в этом состоянии находятся процессы, которые были остановлены с помощью сигнала;
  • Зомби - это мертвые процессы, они были остановлены и больше не выполняются, но для них есть запись в таблице процессов, возможно, из-за того, что у процесса остались дочерние процессы.

А теперь давайте перейдем ближе к практике.

Команда ps в Linux

Сначала рассмотрим общий синтаксис команды, здесь все очень просто:

$ ps опции

$ ps опции | grep параметр

Во втором варианте мы используем утилиту grep для того, чтобы отобрать нужные нам процессы по определенному критерию. Теперь рассмотрим опции утилиты. Они делятся на два типа - те, которые идут с дефисом Unix и те, которые используются без дефиса - BSD. Лучше пользоваться только опциями Unix, но мы рассмотрим и одни и другие. Заметьте, что при использовании опций BSD, вывод утилиты будет организован в BSD стиле.

  • -A, -e, (a) - выбрать все процессы;
  • -a - выбрать все процессы, кроме фоновых;
  • -d, (g) - выбрать все процессы, даже фоновые, кроме процессов сессий;
  • -N - выбрать все процессы кроме указанных;
  • - выбирать процессы по имени команды;
  • -G - выбрать процессы по ID группы;
  • -p, (p) - выбрать процессы PID;
  • --ppid - выбрать процессы по PID родительского процесса;
  • -s - выбрать процессы по ID сессии;
  • -t, (t) - выбрать процессы по tty;
  • -u, (U) - выбрать процессы пользователя.

Опции форматирования:

  • - отображать информацию планировщика;
  • -f - вывести максимум доступных данных, например, количество потоков;
  • -F - аналогично -f, только выводит ещё больше данных;
  • -l - длинный формат вывода;
  • -j, (j) - вывести процессы в стиле Jobs, минимум информации;
  • -M, (Z) - добавить информацию о безопасности;
  • -o, (o) - позволяет определить свой формат вывода;
  • --sort, (k) - выполнять сортировку по указанной колонке;
  • -L, (H)- отображать потоки процессов в колонках LWP и NLWP;
  • -m, (m) - вывести потоки после процесса;
  • -V, (V) - вывести информацию о версии;
  • -H - отображать дерево процессов;

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

ps

Все процессы, кроме лидеров групп, в том же режиме отображения:

ps -A

Все процессы, включая фоновые и лидеры групп:

ps -d

Чтобы вывести больше информации о процессах используйте опцию -f:

ps -f

При использовании опции -f команда выдает такие колонки:

  • UID - пользователь, от имени которого запущен процесс;
  • PID - идентификатор процесса;
  • PPID - идентификатор родительского процесса;
  • C - процент времени CPU, используемого процессом;
  • STIME - время запуска процесса;
  • TTY - терминал, из которого запущен процесс;
  • TIME - общее время процессора, затраченное на выполнение процессора;
  • CMD - команда запуска процессора;
  • LWP - показывает потоки процессора;
  • PRI - приоритет процесса.

Например, также можно вывести подробную информацию обо всех процессах:

ps -Af

Больше информации можно получить, использовав опцию -F:

ps -Fe

Эта опция добавляет такие колонки:

  • SZ - это размер процесса в памяти;
  • RSS - реальный размер процесса в памяти;
  • PSR - ядро процессора, на котором выполняется процесс.

Если вы хотите получить еще больше информации, используйте вместо -f опцию -l:

ps -l

Эта опция добавляет отображение таких колонок:

  • F - флаги, ассоциированные с этим процессом;
  • S - состояние процесса;
  • PRI - приоритет процесса в планировщике ядра Linux;
  • NI - рекомендованный приоритет процесса, можно менять;
  • ADDR - адрес процесса в памяти;
  • WCHAN - название функции ядра, из-за которой процесс находится в режиме ожидания.

Дальше мы можем отобрать все процессы, запущенные от имени определенного пользователя:

ps -fu root

С помощью опции -H можно отобразить дерево процессов:

ps -fHu root

Если вас интересует информация только об определенном процессе, то вы можете использовать опцию -p и указать PID процесса:

ps -fp 1

Через запятую можно указать несколько PID:

ps -fp 1,2,3

Опция позволяет фильтровать процессы по имени, например, выберем только процессы chrome:

ps -fC chrome

Дальше можно использовать опцию -L чтобы отобразить информацию о процессах:

ps -fL

Очень интересно то, с помощью опции -o можно настроить форматирование вывода, например, вы можете вывести только pid процесса и команду:

ps -o pid,comm

Вы можете выбрать такие колонки для отображения: pcpu, pmem, args, comm, cputime, pid, gid, lwp, rss, start, user, vsize, priority. Для удобства просмотра можно отсортировать вывод программы по нужной колонке, например, просмотр процессов, которые используют больше всего памяти:

ps -Fe --sort rss

Или по проценту загрузки cpu:

ps -FA --sort pcpu

Ещё одна опция - -M, которая позволяет вывести информацию про права безопасности и флаги SELinux для процессов:

ps -eM

Общее количество запущенных процессов Linux можно узнать командой:

ps -e | wc

Мы рассмотрели все основные возможности утилиты ps. Дальше вы можете поэкспериментировать с её параметрами и опциями чтобы найти нужные комбинации, также можно попытаться применить опции BSD.

Выводы

Команда ps Linux может быть очень полезной если система перегружена и вам необходимо срочно узнать запущенные процессы linux чтобы освободить память или ресурсы процессора. Интерактивные средства не всегда могут помочь, потому что они потребляют слишком много ресурсов. С другой стороны ps дает большую гибкость поскольку утилита имеет множество опций и параметров. Во всяком случае теперь вы знаете как вывести список процессов. Если остались вопросы, спрашивайте в комментариях!

https://www.youtube.com/watch?v=ftn71nXz5hc

 

Оставьте свой Email для того чтобы получать анонсы новых статей и полезную информацию о Linux по электронной почте
Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .
Pеклама
Посмотреть детали

Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали

7 комментариев к “Команда ps в Linux”

  1. За статью конечно спасибо! но ранее в своих статьях вы обычно давали краткую инструкцию как эту полезную команду можно установить. так вот, как её поставить?

    Ответить
  2. Добрый день!
    Можно пояснить один момент: в статье говорится, что зомби-процессы появляются из-за того, что у этого процесса есть дочерние процессы. Но, насколько я знаю, жизненный цикл процесса построен так, что родительский процесс всегда хоронит дочерний после того, как получит от него системный вызов exit().
    Также читал, что зомби-процессы могут появляться в виду причинно-следственных связей или проблем с железом.
    Прошу Вас, если можно, пояснить этот момент. Большое Вам спасибо!
    Большое спасибо за сайт и информацию, представленную на нём!

    Ответить

Оставьте комментарий