Утилита 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:
Все процессы, кроме лидеров групп, в том же режиме отображения:
Все процессы, включая фоновые и лидеры групп:
Чтобы вывести больше информации о процессах используйте опцию -f:
При использовании опции -f команда выдает такие колонки:
- UID – пользователь, от имени которого запущен процесс;
- PID – идентификатор процесса;
- PPID – идентификатор родительского процесса;
- C – процент времени CPU, используемого процессом;
- STIME – время запуска процесса;
- TTY – терминал, из которого запущен процесс;
- TIME – общее время процессора, затраченное на выполнение процессора;
- CMD – команда запуска процессора;
- LWP – показывает потоки процессора;
- PRI – приоритет процесса.
Например, также можно вывести подробную информацию обо всех процессах:
Больше информации можно получить, использовав опцию -F:
Эта опция добавляет такие колонки:
- SZ – это размер процесса в памяти;
- RSS – реальный размер процесса в памяти;
- PSR – ядро процессора, на котором выполняется процесс.
Если вы хотите получить еще больше информации, используйте вместо -f опцию -l:
Эта опция добавляет отображение таких колонок:
- F – флаги, ассоциированные с этим процессом;
- S – состояние процесса;
- PRI – приоритет процесса в планировщике ядра Linux;
- NI – рекомендованный приоритет процесса, можно менять;
- ADDR – адрес процесса в памяти;
- WCHAN – название функции ядра, из-за которой процесс находится в режиме ожидания.
Дальше мы можем отобрать все процессы, запущенные от имени определенного пользователя:
С помощью опции -H можно отобразить дерево процессов:
Если вас интересует информация только об определенном процессе, то вы можете использовать опцию -p и указать PID процесса:
Через запятую можно указать несколько PID:
Опция -С позволяет фильтровать процессы по имени, например, выберем только процессы chrome:
Дальше можно использовать опцию -L чтобы отобразить информацию о процессах:
Очень интересно то, с помощью опции -o можно настроить форматирование вывода, например, вы можете вывести только pid процесса и команду:
Вы можете выбрать такие колонки для отображения: pcpu, pmem, args, comm, cputime, pid, gid, lwp, rss, start, user, vsize, priority. Для удобства просмотра можно отсортировать вывод программы по нужной колонке, например, просмотр процессов, которые используют больше всего памяти:
Или по проценту загрузки cpu:
ps -FA –sort pcpu
Ещё одна опция – -M, которая позволяет вывести информацию про права безопасности и флаги SELinux для процессов:
Общее количество запущенных процессов Linux можно узнать командой:
Мы рассмотрели все основные возможности утилиты ps. Дальше вы можете поэкспериментировать с её параметрами и опциями чтобы найти нужные комбинации, также можно попытаться применить опции BSD.
Выводы
Команда ps Linux может быть очень полезной если система перегружена и вам необходимо срочно узнать запущенные процессы linux чтобы освободить память или ресурсы процессора. Интерактивные средства не всегда могут помочь, потому что они потребляют слишком много ресурсов. С другой стороны ps дает большую гибкость поскольку утилита имеет множество опций и параметров. Во всяком случае теперь вы знаете как вывести список процессов. Если остались вопросы, спрашивайте в комментариях!