- Просмотр процессов, которые запущены на сервере Linux
- Кратко про то, что такое процесс
- Утилита ps
- Работа с процессами в Linux
- Список процессов
- Ключи
- Примеры
- Убить процесс
- Подробная информация о процессе
- Потребление ресурсов процессами
- Команда Ps в Linux (список процессов)
- Как использовать команду ps
- Пользовательский формат
- Использование ps с другими командами
- Выводы
Просмотр процессов, которые запущены на сервере Linux
Одной из частых задач системного администратора Линукс-сервера является просмотр запущенных процессов. Поэтому расскажу про то, как эти процессы смотреть и что делать с информацией о том, что запущено на сервере.
Напоминаю, что другие полезные материалы по теории и практике Linux вы можете найти в специальном разделе на канале.
Кратко про то, что такое процесс
Если очень-очень сильно упростить теорию, то процессом мы можем назвать всякую выполняющуюся программу в Linux. Иногда говорят, что процесс это не просто сама программа, а «ее экземпляр, запущенный в отдельном виртуальном адресном пространстве», но мне проще представлять себе процесс просто в роли программы.
Состояние процесса можно описать тремя моделями:
Выполнение это состояние, при котором процесс обладает всеми нужными ему ресурсами и непосредственно выполняется (используется) процессором. Во время ожидания процесс заблокирован, так как ожидает какое-либо событие, например ввод данных или свободного для взаимодействия устройства. В состоянии готовности процесс тоже заблокирован, но по каким-то внешним причинам (например, процессор переключился на другой процесс, но при этом наш процесс уже готов к выполнению, нужны лишь ресурсы). Если дополнить эту модель еще двумя состояниями — создание (рождение) и завершение (смерть), то получится привычный жизненный цикл процесса в Linux (в общем, все как у людей).
После создания и до момента завершения процессы выстраиваются в виде дерева, на вершине которого всегда находится процесс под названием init (про него мы поговорим в одной из следующих заметок).
Мне кажется, что этот самый минимум информации, которого достаточно, чтобы понять процессы, перейдем к моей любимой практике.
Утилита ps
Для просмотра системных процессов используется утилита (и одноименная команда) ps, образованная от слов «process status». Она идет по-умолчанию во всех дистрибутивах Linux, поэтому никаких дополнительных телодвижений в плане установки делать не нужно. Просто в терминале вводим две буквы ps
Работа с процессами в Linux
Обновлено: 29.03.2023 Опубликовано: 09.11.2017
Список процессов
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 661 0.0 0.0 4072 8 tty1 Ss+ Jul03 0:00 /sbin/mingetty
root 662 0.0 0.0 4072 8 tty2 Ss+ Jul03 0:00 /sbin/mingetty
root 16355 0.0 0.0 171636 3308 pts/0 S 15:46 0:00 sudo su
root 16366 0.0 0.0 140896 1556 pts/0 S 15:46 0:00 su
root 16368 0.0 0.0 108316 1944 pts/0 S 15:46 0:00 bash
root 18830 0.0 0.0 110244 1172 pts/0 R+ 16:20 0:00 ps u
- USER — учетная запись пользователя, от которой запущен процесс.
- PID — идентификатор процесса.
- %CPU — потребление процессорного времени в процентном эквиваленте.
- %MEM — использование памяти в процентах.
- VSZ — Virtual Set Size. Виртуальный размер процесса (в килобайтах).
- RSS — Resident Set Size. Размер резидентного набора (количество 1K-страниц в памяти).
- TTY — терминал, из под которого был запущен процесс.
- STAT — текущее состояние процесса. Могут принимать значения:
- R — выполнимый процесс;
- S — спящий;
- D — в состоянии подкачки на диске;
- T — остановлен;
- Z — зомби.
- W — не имеет резидентных страниц;
- < —высоко-приоритетный;
- N — низко-приоритетный;
- L — имеет страницы, заблокированные в памяти.
- START — дата запуска процесса.
- TIME — время запуска процесса.
- COMMAND — команда, запустившая процесс.
Ключи
Ключ | Описание |
---|---|
-A | Все процессы. |
-a | Запущенные в текущем терминале, кроме главных системных. |
-d | Все, кроме главных системных процессов сеанса. |
-e | Все процессы. |
f | Показать дерево процессов с родителями. |
T | Все на конкретном терминале. |
a | Все, связанные с текущим терминалом и терминалами других пользователей. |
r | Список только работающих процессов. |
x | Отсоединённые от терминала. |
u | Показать пользователей, запустивших процесс. |
Примеры
Поиск процесса с помощью grep:
Убить процесс
Останавливаем процесс по его PID:
Если процесс не завершается, убиваем его принудительно:
Остановить все процессы с именем nginx:
Как и в случае с kill, можно это сделать принудительно:
Можно остановить все процессы конкретного пользователя:
Ищем процесс по имени, извлекаем его PID и завершаем его:
kill `ps aux | grep ‘apache’ | awk »`
* обратите внимание, что запрос может вывести несколько процессов, которые будут попадать под критерии поиска — в таком случае, они будут завершены все.
Подробная информация о процессе
Для каждого процесса создается каталог по пути /proc/ , в котором создаются папки и файлы с описанием процесса.
Примеры использования /proc/
Адрес в ячейках оперативной памяти, которые занял процесс:
Команда, которой был запущен процесс:
Символьная ссылка на рабочий каталог процесса:
Символьная ссылка на исполняемый файл, запустивший процесс:
Увидеть ссылки на дескрипторы открытых файлов, которые затрагивает процесс:
Подробное описание на сайте man7.org.
Потребление ресурсов процессами
Для просмотра статистики потребления ресурсов используем утилиту top:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21059 root 20 0 157884 2280 1496 R 18,8 0,1 0:00.03 top
1 root 20 0 190996 2964 1652 S 0,0 0,1 6:49.99 systemd
2 root 20 0 0 0 0 S 0,0 0,0 0:01.78 kthreadd
3 root 20 0 0 0 0 S 0,0 0,0 0:24.75 ksoftirqd/0
5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H
- PID — идентификатор процесса.
- USER — имя учетной записи, от которой запущен процесс.
- PR — приоритет процесса.
- NI — приоритет, выставленной командой nice.
- VIRT — объем виртуальной памяти, потребляемый процессом.
- RES — объем используемой оперативной памяти.
- SHR — количество разделяемой памяти, которое используется процессом.
- S — состояние процесса.
- %CPU — процент использования процессорного времени.
- %MEM — потребление оперативной памяти в процентах.
- TIME — использование процессорного времени в секундах.
- COMMAND — команда, которая запустила процесс.
Команда Ps в Linux (список процессов)
В Linux запущенный экземпляр программы называется процессом. Иногда при работе на машине Linux вам может потребоваться выяснить, какие процессы выполняются в данный момент.
Существует ряд команд, которые вы можете использовать для поиска информации о запущенных процессах, из которых наиболее часто используются ps , pstree и top .
В этой статье объясняется, как использовать команду ps для вывода списка запущенных в данный момент процессов и отображения информации об этих процессах.
Как использовать команду ps
Общий синтаксис команды ps следующий:
По историческим причинам и из соображений совместимости команда ps принимает несколько различных типов параметров:
- Параметры стиля UNIX, которым предшествует одиночный дефис.
- Параметры стиля BSD, используемые без тире.
- Параметры GNU с двумя дефисами перед ними.
Можно смешивать разные типы опций, но в некоторых конкретных случаях могут возникать конфликты, поэтому лучше придерживаться одного типа опций.
Опции BSD и UNIX можно сгруппировать.
В простейшей форме, при использовании без какой-либо опции, ps напечатает четыре столбца информации как минимум для двух процессов, запущенных в текущей оболочке, самой оболочки и процессов, запущенных в оболочке при вызове команды.
Вывод включает информацию о оболочке ( 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 процесса. Знание PID позволяет устранить неисправный процесс .
- TTY — имя управляющего терминала для процесса.
- TIME — совокупное время ЦП процесса в минутах и секундах.
- CMD — имя команды, которая использовалась для запуска процесса.
Приведенный выше вывод не очень полезен, поскольку не содержит много информации. Настоящая мощь команды ps проявляется при запуске с дополнительными параметрами.
Команда ps принимает огромное количество параметров, которые можно использовать для отображения определенной группы процессов и различной информации о процессе, но при повседневном использовании требуется лишь несколько.
ps чаще всего используется со следующей комбинацией параметров:
- Параметр 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 — размер виртуальной памяти процесса в КиБ.
- RSS — размер физической памяти, которую использует процесс.
- STAT — код состояния процесса, например Z (зомби), S (спящий) и R (запущенный).
- START — время начала команды.
Параметр f указывает ps отображать древовидное представление родительских и дочерних процессов:
Команда ps также позволяет сортировать вывод. Например, чтобы отсортировать вывод на основе использования памяти , вы должны использовать:
- Параметр -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 , время начала команды.
Чтобы просмотреть только процессы, запущенные от имени конкретного пользователя, введите следующую команду, где linuxize — это имя пользователя:
ps -f -U linuxize -u linuxize
Пользовательский формат
Параметр o позволяет указать, какие столбцы будут отображаться при запуске команды ps .
Например, чтобы распечатать информацию только о PID и COMMAND , вы должны выполнить одну из следующих команд:
Использование ps с другими командами
ps можно использовать в сочетании с другими командами через конвейер.
Если вы хотите отобразить вывод команды ps , по одной странице за раз передайте его команде less :
Вывод команды ps можно отфильтровать с помощью grep . Например, чтобы показать только процесс, принадлежащий пользователю root, вы должны запустить:
Выводы
Команда ps — одна из наиболее часто используемых команд при устранении неполадок в системах Linux. У него много опций, но обычно большинство пользователей используют ps aux или ps -ef для сбора информации о запущенных процессах.
Чтобы получить дополнительную информацию о ps , введите в терминале man ps .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.