Команда ps в Linux
Утилита ps одна из самых простых и в то же время часто используемых программ для просмотра списка процессов в Linux. Она не поддерживает интерактивный режим, зато имеет множество опций для настройки вывода тех или иных параметров процессов в Linux.
В этой статье мы рассмотрим как пользоваться ps, что с помощью неё можно посмотреть, а также какие основные опции можно использовать.
Что такое процесс?
Чтобы понять что отображает команда ps сначала надо разобратся что такое процесс. Процесс Linux — это экземпляр программы, запущенный в памяти. Все процессы можно разделить на обычные и фоновые. Более подробно об этом написано в статье управление процессами Linux. Linux — это многопользовательская система, каждый пользователь может запускать одни и те же программы, и даже один пользователь может захотеть запустить несколько экземпляров одной программы, поэтому ядру нужно как-то идентифицировать такие однотипные процессы. Для этого каждому процессу присваивается PID (Proccess Identificator).
Каждый из процессов может находиться в одном из таких состояний:
- Запуск — процесс либо уже работает, либо готов к работе и ждет, когда ему будет дано процессорное время;
- Ожидание — процессы в этом состоянии ожидают какого-либо события или освобождения системного ресурса. Ядро делит такие процессы на два типа — те, которые ожидают освобождения аппаратных средств и приостановление с помощью сигнала;
- Остановлено — обычно, в этом состоянии находятся процессы, которые были остановлены с помощью сигнала;
- Зомби — это мертвые процессы, они были остановлены и больше не выполняются, но для них есть запись в таблице процессов, возможно, из-за того, что у процесса остались дочерние процессы.
А теперь давайте перейдем ближе к практике.
Команда ps в Linux
Сначала рассмотрим общий синтаксис команды, здесь все очень просто:
$ 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:
Ещё одна опция — -M, которая позволяет вывести информацию про права безопасности и флаги SELinux для процессов:
Общее количество запущенных процессов Linux можно узнать командой:
Мы рассмотрели все основные возможности утилиты ps. Дальше вы можете поэкспериментировать с её параметрами и опциями чтобы найти нужные комбинации, также можно попытаться применить опции BSD.
Выводы
Команда ps Linux может быть очень полезной если система перегружена и вам необходимо срочно узнать запущенные процессы linux чтобы освободить память или ресурсы процессора. Интерактивные средства не всегда могут помочь, потому что они потребляют слишком много ресурсов. С другой стороны ps дает большую гибкость поскольку утилита имеет множество опций и параметров. Во всяком случае теперь вы знаете как вывести список процессов. Если остались вопросы, спрашивайте в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Посмотреть дерево процессов linux
ИМЯ
pstree - показывает дерево процессов
ОБЗОР
pstree [-a, --arguments] [-c, --compact-not] [-C, --color attr] [-g, --show-pgids] [-h, --highlight-all, -H pid, --highlight-pid pid] [-l, --long] [-n, --numeric-sort] [-N, --ns-sort ns] [-p, --show-pids] [-s, --show-parents] [-S, --ns-changes] [-t, --thread-names] [-T, --hide-threads] [-u, --uid-changes] [-Z, --security-context] [-A, --ascii, -G, --vt100, -U, --unicode] [pid, user] pstree -V, --version
ОПИСАНИЕ
pstree показывает выполняющиеся процессы в виде дерева. Корнем дерева является pid или init, если pid не указан. Если указано имя пользователя, то все показываемые процессы в дереве начинаются от процессов, принадлежащих этому пользователю. pstree визуально объединяет одинаковые ветви, заключая их в квадратные скобки и показывает перед ними количество повторов, например init-+-getty |-getty |-getty `-getty показывается как init---4*[getty] Если у родителя обнаружены дочерние нити процессов, то они показываются как имя процесс в фигурных скобках, например icecast2---13*[] Если pstree вызывается как pstree.x11, то в конце данных выводится приглашение пользователю нажать return и программа не завершается пока этого не будет сделано. Это полезно, если pstree запускается в xterminal. Некоторые параметры ядра или монтирования, такие как параметр hidepid для procfs, скрывают информацию для некоторых процессов. В этих ситуациях pstree пытается построить дерево без этой информации, отображая вместо имён процессов знаки вопроса.
ПАРАМЕТРЫ
-a Показывать аргументы командной строки. Если командная строка процесса затёрлась, то процесс показывается в скобках. Параметр -a неявно отключает сжатие процессов, но не нитей. -A Использовать ASCII-символы для рисования дерева. -c Не сжимать одинаковые поддеревья. По умолчанию поддеревья сжимаются везде где возможно. -C Color the process name by given attribute. Currently pstree only accepts the value age which colors by process age. Processes newer than 60 seconds are green, newer than an hour yellow and the remaining red. -g Показывать PGID. Идентификаторы групп процесса показываются десятичными числами в скобках после каждого имени процесса. -g неявно отключает сжатие. Если выводятся PID и PGID, то PID показывается первым. -G Использовать символы рисования линий от VT100. -h Подсветить текущий процесс и его предков. Ничего не происходит, если терминал не поддерживает подсветку или если текущий процесс или его потомки не показываются в поддереве. -H Подобен -h, но подсвечивается заданный процесс. В отличии от -h, pstree завершается ошибкой, если указан -H и подсветка недоступна. -l Показывать длинные строки. По умолчанию, строки обрезаются до значения из переменной окружения COLUMNS или до ширины экрана. Если ни одно из этого недоступно, то по умолчанию используется значение в 132 колонки. -n Сортировать процессы с одинаковым именем родителя по PID, а не по имени (числовая сортировка). -N Показывать отдельные деревья для каждой области имён заданного типа. Доступные типы: ipc, mnt, net, pid, time, user, uts. Обычные пользователи не имеют доступа к информации о процессах других пользователей, поэтому вывод будет ограниченным. -p Показывать идентификаторы пользователей. PID показывается десятичными числами в скобках после каждого имени процесса. -p неявно отключает сжатие. -s Показывать родителей указанного процесса. -S Показывать изменения областей имён. Подобен -N, вывод ограничен при запуске обычным пользователем. -t Показывать полные имена нитей, если доступны. -T Скрывать нити и показывать только процессы. -u Показывать изменения идентификаторов пользователей. Если uid процесса отличается от uid его родителя, то показывается новый uid в скобках после имени процесса. -U Использовать символы рисования линий UTF-8 (Юникод). В Linux 1.1-54 и новее режим UTF-8 включается на консоли командной echo -e ' 33%8' и выключается echo -e ' 33%@'. -V Показать информацию о версии. -Z Показывать текущие атрибуты безопасности процесса. Для систем SELinux используется контекст безопасности.
ФАЙЛЫ
/proc местонахождение файловой системы proc
ДЕФЕКТЫ
Некоторые наборы символов могут быть несовместимы с символами VT100.
СМОТРИТЕ ТАКЖЕ
ps(1), top(1), proc(5).