Команда ps выводит список текущих процессов на вашем сервере. Используется обычно в сочетании с командой grep и more или less.
Примечание: more и less – дополнительные команды, которые помогают фильтровать и разбивать на страницы выходные данные ps, так как они часто бывают довольно длинными.
Оглавление
Как использовать команду ps
Общий синтаксис команды ps выглядит следующим образом:
ps [OPTIONS]
По историческим причинам и из соображений совместимости команда ps принимает несколько различных типов параметров:
- Опции стиля UNIX, перед которыми стоит одна черточка.
- Варианты стиля BSD, используемые без тире.
- Длинные опции GNU, начинающиеся с двух тире.
Все типы опций могут быть смешанными, но в некоторых особых случаях могут возникать конфликты, поэтому лучше придерживаться одного типа опций. Опции BSD и UNIX могут быть сгруппированы.
В простейшей форме, когда используется без какой-либо опции, ps будет напечатано четыре столбца информации для минимум двух процессов, запущенных в текущей оболочке, самой оболочки и процессов, которые выполняются в оболочке при выполнении команды.
ps
Вывод включает в себя информацию о shell (bash) и процессе, запущенном в этой оболочке (введенная вами команда ps):
PID TTY TIME CMD 1809 pts/0 00:00:00 bash 2043 pts/0 00:00:00 ps
Четыре колонки помечены PID, TTY, TIMEи CMD.
- PID- Идентификатор процесса. В большинстве случаев при запуске psкоманды наиболее важной информацией, которую ищет пользователь, является идентификатор процесса. Знание PID позволяет убить сбойный процесс.
- TTY – Название управляющего терминала для процесса.
- TIME – Совокупное время ЦП процесса, показанное в минутах и секундах.
- CMD – Имя команды, которая использовалась для запуска процесса.
Вывод выше не очень полезен, так как он не содержит много информации. Настоящая сила команды ps появляется при запуске с дополнительными опциями.
Команда ps принимает огромное количество опций, которые можно использовать для отображения определенной группы процессов и различной информации о процессе, но для повседневного использования требуется лишь несколько из них.
Команда ps чаще всего используется со следующей комбинацией параметров:
Форма BSD:
ps aux
- Опция a указывает ps вывести на дисплей процессы всех пользователей, за исключением тех процессов, которые не связаны с терминалом и процессами группы лидеров.
- В u – подставки для ориентированных на пользователя формате, который обеспечивает подробную информацию о процессах.
- Опция x в ps перечисляет процессы без управляющего терминала. В основном это процессы, которые запускаются во время загрузки и работают в фоновом режиме.
Команда будет отображать информацию в одиннадцати столбцах USER, PID, %CPU, %MEM, VSZ, RSS, STAT, START, TTY, TIMEи CMD.
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.8 77616 8604 ? Ss 19:47 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 19:47 0:00 [kthreadd] …
Мы уже объяснили метки PID, TTY, TIMEи CMD. Вот объяснение других меток:
- USER – Пользователь, который запускает процесс.
- %CPU- Процесс использования процессора .
- %MEM – Процент резидентного установленного размера процесса к физической памяти на машине.
- VSZ – Размер виртуальной памяти процесса в KiB.
- RSS- Размер физической памяти , используемой процессом.
- STAT- Код состояния процесса, который может быть Z (zombie), S (sleeping), R (running) .. и т. д.
- START – время, когда команда началась.
Чтобы напечатать дерево процессов, добавьте опцию f. Это укажет ps отобразить древовидное представление дочерних процессов.
ps auxf
Команда ps также позволяет вам сортировать вывод. Например, чтобы отсортировать вывод на основе использования памяти, вы бы использовали:
ps aux –sort=-%mem
форма UNIX:
ps -ef
- Опция e указывает ps отобразить все процессы.
- f – полноформатный список, который содержит подробную информацию о процессах.
Команда будет отображать информацию в столбцах UID, PID, PPID, C, STIME, TIME и CMD.
UID PID PPID C STIME TTY TIME CMD root 1 0 0 19:47 ? 00:00:01 /sbin/init root 2 0 0 19:47 ? 00:00:00 [kthreadd] …
Метки, которые еще не объяснены, имеют следующее значение:
- UID – То же USER, что и пользователь, который запускает процесс.
- PPID – Идентификатор родительского процесса.
- C- То же %CPU, что процесс загрузки процессора.
- STIME- То же START, что и время начала команды.
Чтобы увидеть только процессы, запущенные от имени определенного пользователя, используйте следующую команду, где andreyex указано имя пользователя:
ps -f -U andreyex -u andreyex
Пользовательский формат
Опция o позволяет указать, какие столбцы будут отображаться при выполнении команды ps.
Например, чтобы напечатать информацию только о PID и COMMAND вы бы выполнить одну из следующих команд:
ps -efo pid,commconsole-bash ps auxo pid,comm
## Использование команды ps может использоваться в сочетании с другими командами через трубопровод. Если вы хотите отобразить вывод команды ‘ps’, по одной странице за раз передайте его в команде less:
console-bash ps -ef | less
Выходные данные команды ‘ps’ могут быть отфильтрованы с помощью grep, например, чтобы показать только процесс, принадлежащий пользователю root, вы должны запустить:
console-bash ps -ef | grep root “ `
Выбор конкретных процессов
Вы можете вывести определенные процессы с помощью ps с помощью различных критериев выбора.
Например, если вы знаете идентификатор процесса PID, вы можете просто использовать следующую команду:
ps -p Например: ps -p 22813 Вы можете выбрать несколько процессов, указав несколько идентификаторов процесса следующим образом: ps -p “ Например: ps -p “22813 28599” Вы также можете указать их с помощью списка, разделенного запятыми: ps -p Например: ps -p 22813,28599 Скорее всего, вы не будете знать идентификатор процесса, и его легче искать по команде. Для этого используйте следующую команду: ps -C <команда> Например: ps -C nginx Другие способы фильтрации результатов – по группам. Вы можете искать по имени группы, используя следующий синтаксис: ps -G Например, чтобы узнать все процессы, выполняемые группой accounts, выполните следующие действия: ps -G “accounts” Вы также можете выполнять поиск по идентификатору группы GID вместо имени группы с помощью строчной буквы g следующим образом: ps -g Если вы хотите найти все процессы, выполняемые конкретным пользователем, выполните следующую команду, указав имя пользователя: ps U Например: ps U gary Обратите внимание, что это показывает человека, чьи учетные данные используются для запуска команды. Например, если вы вошли в систему как gary и запустите указанную выше команду, она покажет всю команду, которую вы выполняете. Если вы входите в систему как tom и используете sudo для запуска команды, то приведенная выше команда покажет команду tоm’а, которую запускает gary, а не tom. Чтобы ограничить список только процессами, действительно запущенными gary, используйте следующую команду: ps -U “gary”
ps –Group
ps –Group “accounts”
ps –group
Форматирование вывода команды ps
По умолчанию вы получаете четыре столбца, когда используете команду ps: PID, TTY, Time, Command. О них написано в начале статьи.
Вы можете получить полный список, выполнив следующую команду:
ps -ef
Опция -e, показывает все процессы, а -f показывает полную информацию: UID – идентификатор пользователя выполняющего команду, PID – это идентификатор процесса команды, PPID – идентификатор родительского процесса, который отпустил команду, C – количество дочерних процессов, STIME – это время начала процесса, TTY, TIME, CMD.
Вы можете получить еще больше информационных столбцов, используя следующую команду:
ps -eF
Дополнительные столбцы – SZ, RSS и PSR. SZ – это размер процесса, RSS – реальный размер памяти, а PSR – процессор, которому назначена команда.
Вы можете указать пользовательский формат, используя следующий формат:
ps -e –format Доступны следующие форматы: %cpu, %mem, args, c, cmd, comm, cp, cputime, egid, egroup, etime, euid, euser, gid, group, pgid, pgrp, ppid, start, sz, thcount, time, uid, uname и многие другие, ознакомиться с ними в разделе помощи man. Чтобы использовать форматы, введите следующее: ps -e –format=”uid uname cmd time” Вы можете смешивать и сопоставлять элементы по своему усмотрению.
Вывод без опций
PS (process state) — стандартная утилита всех дистрибутивов Linux, используемая через консоль. Ее основное предназначение — отображение информации обо всех запущенных процессах. Количество и детально показываемых сведений зависит от установленных опций, которые выбираются при непосредственной активации самой команды. Об опциях мы поговорим немного позже, а сейчас давайте просто введем ps в «Терминале» и нажмем на Enter.
Как видно на скриншоте ниже, отобразилось всего строки, среди которых находится оболочка bash и сам процесс рассматриваемой команды.
Конечно, здесь может быть еще несколько пунктов, что зависит от количества запущенных пользовательских программ, однако в большинстве случаев пользователей такой вывод не устраивает, поэтому мы и предлагаем перейти к изучению дополнительных опций.
Вывод списка всех процессов
Утилита PS без указания специальных опций не позволяет получить полезную информацию, которая может пригодиться во время изучения списка активных процессов, поэтому и важно применять аргументы. Первый из них отвечает за отображение абсолютно всех текущих задач, а строка принимает вид ps -A.
В итоге отобразится огромное количество строк, с которыми следует разобраться. Делятся сведения на несколько столбцов. PID отображает идентификационный номер процесса и может использоваться, например, для быстрого завершения работы этой программы или проверки дерева задач. TTY — имя терминала, где запущен текущий процесс. TIME — время работы, а CMD — название команды задачи.
Дополнительно можно использовать команду ps -e, чтобы отобразить список всех процессов, если предыдущий вариант вас не устраивает.
Как видно, выдача после активации опции -e получилась точно такая же, как и при вводе аргумента -A.
Существует формат вывода BSD, отвечающий за отображение связанных с пользователями процессов, а также отображает более детальные сведения о работе задач, нагрузке их на процессор и точное расположение. Для получения таких сведений следует использовать ps au.
На указанном ниже изображении вы видите, что количество столбцов значительно прибавилось. В итоге к ознакомлению будет доступен полный список процессов с привязкой к учетной записи и отображением места расположения.
Полноформатный листинг
Рассмотренные выше примеры позволяли отобразить практически все необходимые сведения, которые могут быть полезны начинающим пользователям. Однако иногда требуется получить более детальный листинг, например, чтобы определить источник вызова процесса. Тогда на помощь придет строка такого вида: ps -ef.
Отобразятся практически те же столбцы, о которых мы уже говорили ранее, но дополнительно появится детальная развертка о расположении и первый же пункт будет отвечать за источник вызова задачи.
Отображение пользовательских процессов
Опция -x отвечает за отображение процессов, которые были отсоединены от терминала, то есть запущены лично пользователем. Если вы хотите узнать, какие именно задачи были открыты от имени текущей учетной записи, в консоли достаточно будет ввести строку ps -x и нажать на Enter.
Вывод будет максимально информативный, но без дополнительных сведений. Однако ничего не помешает задействовать и дополнительные опции, например, -eM для показа контекста безопасности.
Если же требуется получить информацию о данных другого пользователя, измените строку на ps -fU lumpics, где lumpics замените на необходимое имя.
В результатах вывода обратите внимание на первый столбец. Вы не найдете там других владельцев кроме указанного в команде до ее активации.
Как напечатать дерево определённого процесса
Вы можете получить дерево процессов только нужной вам программы следующим образом (замените sshd на интересующий вас процесс):
ps -f –forest -C sshd
Или так:
ps -ef –forest | grep -v grep | grep sshd
Об опции -C будет рассказано далее в этой статье.
Фильтрация вывода ps по определённым строкам (по имени команды, например)
Вы можете направить вывод из ps через grep и найти нужные записи о процессах по любым строкам. Здесь мы ищем записи, соответствующие поисковому запросу «firefox»:
ps -e | grep firefox
В этом случае выходные данные представляют собой одну запись для интересующего нас процесса. Конечно, если бы мы запустили несколько экземпляров Firefox, в списке было бы более одного элемента.
Больше столбцов в выводе ps
Чтобы добавить дополнительные столбцы к выводу, используйте параметр -f (полный формат).
ps -ef | less
Дополнительный набор столбцов включён в вывод ps.
Из новых столбов появились:
- UID: идентификатор пользователя владельца этого процесса.
- PPID: идентификатор родительского процесса.
- C: Количество детей, которые есть у процесса.
- STIME: Время начала. Время, когда процесс был запущен.
Используя опцию -F (дополнительный полный формат), мы можем получить ещё больше столбцов:
ps -eF | less
Если у вас маленькое окно терминала, то столбцы, которые мы получаем в этот раз, требуют прокрутки экрана в сторону, чтобы показать их все. Нажатие клавиши «Стрелка вправо» смещает дисплей влево.
Теперь добавились следующие столбцы:
- SZ: размер страниц ОЗУ образа процесса.
- RSS: резидентный размер набора. Это не подкачанная физическая память, используемая процессом.
- PSR: процессор, которому назначен процесс.
Нужно ли указывать дефис перед опциями ps
В некоторых примерах вы можете увидеть использование ps с опциями без дефиса или с длинными вариантами написания опций в стиле GNU. Для совместимости, ps поддерживает все три формата. Опции без дефиса — это стиль BSD и значение опций с дефисом и без может быть различным!
Пример показа процессов в формате BSD:
ps au # ИЛИ ps axu
В этой команде значение опций следующее:
- u — ориентированный на пользователя формат
- a — убирает ограничение «только свои процессы»
- x — убирает ограничение «только процессы с терминалом»
Проще говоря, если использовать вместе a и x, то будут показаны все процессы.
Нужно быть аккуратным, и не забывать ставить дефис если вы используете опции UNIX, поскольку в случае неопределённости ps будет пытаться трактовать в разных вариантах. В этой инструкции кроме рассмотренного примера везде используются опции UNIX.
Заключение
Команда ps является одной из наиболее часто используемых команд при устранении неполадок в системах Linux. Она имеет много вариантов, но, как правило, большинство пользователей используют либо ps aux или ps -ef для сбора информации о запущенных процессах.
Для получения информации обо всех доступных опциях ps введите man ps в своем терминале.
[spoiler title=”Источники”]- https://1cloud.ru/help/security/ispolzovanie-komandy-ps-dlya-prosmotra-protsessov-linux
- https://andreyex.ru/operacionnaya-sistema-linux/komanda-ps-v-linux/
- https://lumpics.ru/command-ps-in-linux/
- https://ZaLinux.ru/?p=3596