Дерево процессов linux команда

Sysadminium

Здесь будет рассмотрена утилита ps, с помощью которой мы можем изучать работающие процессы в системе Linux.

Утилита ps

Утилита ps показывает срез информации на данный момент времени. То есть некоторые свойства процесса могут изменяться со временем. Например, используемая оперативная память может вырасти или уменьшится. А команда ps покажет занимаемую память процессом в данный момент.

Вы можете почитать официальный мануал по команде ps здесь, или выполните команду man ps .

Просмотр общего списка процессов

Если вызвать ps без аргументов то увидим процессы своего пользователя привязанные к текущему терминалу (TTY):

alex@deb-11:~$ ps PID TTY TIME CMD 3621 pts/0 00:00:00 bash 20010 pts/0 00:00:00 ps

Чтобы посмотреть все процессы в системе используют опции ax, я добавил head чтобы вывести первые 10 процессов, так как их много:

alex@deb-11:~$ ps ax | head PID TTY STAT TIME COMMAND 1 ? Ss 0:04 /lib/systemd/systemd --system --deserialize 33 2 ? S 0:00 [kthreadd] 3 ? I< 0:00 [rcu_gp] 4 ? I< 0:00 [rcu_par_gp] 6 ? I< 0:00 [kworker/0:0H-events_highpri] 8 ? I< 0:00 [kworker/0:1H-events_highpri] 9 ? I< 0:00 [mm_percpu_wq] 10 ? S 0:00 [rcu_tasks_rude_] 11 ? S 0:00 [rcu_tasks_trace]

Давайте разберемся с этими опциями:

  • a — показать все процессы у которых есть управляющий терминал;
  • x — показать все процессы у которых нет управляющего терминала.

Также чтобы вывести все процессы можно воспользоваться опцией -e, при этом вы не увидите состояния процессов:

alex@deb-11:~$ ps -e | head PID TTY TIME CMD 1 ? 00:00:04 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:00 rcu_gp 4 ? 00:00:00 rcu_par_gp 6 ? 00:00:00 kworker/0:0H-events_highpri 8 ? 00:00:00 kworker/0:1H-events_highpri 9 ? 00:00:00 mm_percpu_wq 10 ? 00:00:00 rcu_tasks_rude_ 11 ? 00:00:00 rcu_tasks_trace

Чтобы увидеть больше информации воспользуемся опцией u:

alex@deb-11:~$ ps -e u | head USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 1.0 164824 10184 ? Ss сен09 0:04 /lib/systemd/systemd --system --deserialize 33 root 2 0.0 0.0 0 0 ? S сен09 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< сен09 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< сен09 0:00 [rcu_par_gp] root 6 0.0 0.0 0 0 ? I< сен09 0:00 [kworker/0:0H-events_highpri] root 8 0.0 0.0 0 0 ? I< сен09 0:00 [kworker/0:1H-events_highpri] root 9 0.0 0.0 0 0 ? I< сен09 0:00 [mm_percpu_wq] root 10 0.0 0.0 0 0 ? S сен09 0:00 [rcu_tasks_rude_] root 11 0.0 0.0 0 0 ? S сен09 0:00 [rcu_tasks_trace]

Так как я показываю первые 10 процессов, а они отсортированы по pid, то сюда попали только процессы ядра, которые не имеют управляющего терминала.

Просмотр информации о конкретных процессах

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

alex@deb-11:~$ ps -p 1 PID TTY TIME CMD 1 ? 00:00:04 systemd alex@deb-11:~$ ps u -p 1 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 1.0 164824 10184 ? Ss сен09 0:04 /lib/systemd/systemd --system --deserialize 33

Можно вывести информацию сразу по нескольким процессам перечислив их через запятую:

alex@deb-11:~$ ps u -p 1,2 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 1.0 164824 10184 ? Ss сен09 0:04 /lib/systemd/systemd --system --deserialize 33 root 2 0.0 0.0 0 0 ? S сен09 0:00 [kthreadd]

Ещё можно получить информацию по процессам определенного пользователя. Для этого используется опция -u и имя пользователя или его номер:

alex@deb-11:~$ ps u -u www-data USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND www-data 19634 0.0 1.3 1216100 13092 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start www-data 19635 0.0 0.6 1216100 6972 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start alex@deb-11:~$ id www-data uid=33(www-data) gid=33(www-data) группы=33(www-data) alex@deb-11:~$ ps u -u 33 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND www-data 19634 0.0 1.3 1216100 13092 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start www-data 19635 0.0 0.6 1216100 6972 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start

Также можно вывести информацию определенной группы пользователей. Для этого используем опцию -g:

alex@deb-11:~$ ps u -g www-data USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND www-data 19634 0.0 1.3 1216100 13092 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start www-data 19635 0.0 0.6 1216100 6972 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start

Чтобы вывести информацию по процессам определенной программы воспользуемся опцией -C и именем программы:

$ ps u -C apache2 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 3753 0.0 0.7 11228 7984 ? Ss сен12 0:15 /usr/sbin/apache2 -k start www-data 19634 0.0 1.3 1216100 13092 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start www-data 19635 0.0 0.6 1216100 6972 ? Sl 00:00 0:00 /usr/sbin/apache2 -k start

Как видно apache2 работает не только от пользователя www-data, один из процессов запущен от root. Это мастер-процесс, который запускает все остальные процессы apache2. Только root процессы могут прослушивать порты с номерами ниже 1024. Веб-сервер обычно работает на порту 80 или 443. Это означает, что он должен запускаться с правами root.

Читайте также:  Когда опадают иголки хвойных деревьев

Получение определённой информации

Вы уже познакомились с опцией u, которая показывает больше информации. Но можно самому указать какую информацию вы хотите увидеть используя опцию -o. А с опцией L получим список полей которые можем выводить:

alex@deb-11:~$ ps L | tail user USER userns USERNS util C utsns UTSNS uunit UUNIT vsize VSZ vsz VSZ wchan WCHAN wname WCHAN zone ZONE

Я использовал tail, чтобы вывести всего 10 строк, так как список полей очень велик. Всего существует 175 полей с информацией о процессе, которые вы можете получить.

Например, выведем команду и командную строку:

alex@deb-11:~$ ps -o comm,cmd COMMAND CMD bash -bash ps ps -o comm,cmd

Выведем информацию по памяти:

alex@deb-11:~$ ps -o comm,%mem,rss,vsz COMMAND %MEM RSS VSZ bash 0.7 7192 10328 ps 0.1 1144 9684

Или информацию по процессору:

alex@deb-11:~$ ps -o comm,%cpu,cputime,cpuid COMMAND %CPU TIME CPUID bash 0.0 00:00:00 1 ps 0.0 00:00:00 0

Получим информацию относящуюся к пользователям и идентификаторам:

alex@deb-11:~$ ps -o comm,ppid,pid,user,uid,group,gid COMMAND PPID PID USER UID GROUP GID bash 3620 3621 alex 1000 alex 1000 ps 3621 20046 alex 1000 alex 1000

Вывод информации в виде дерева процессов

Утилита ps может вывести информацию в виде дерева процессов. Для этого нужно использовать опцию f. Но информация в виде дерева выводится только если в выводе присутствуют поля comm или cmd:

alex@deb-11:~$ ps f -o pid,user,comm,cmd PID USER COMMAND CMD 3621 alex bash -bash 20047 alex \_ ps \_ ps f -o pid,user,comm,cmd
alex@deb-11:~$ ps f PID TTY STAT TIME COMMAND 3621 pts/0 Ss 0:00 -bash 20048 pts/0 R+ 0:00 \_ ps f

Комбинирование опций команды ps

Можно комбинировать все эти опции, например вывести в виде дерева процессы определенного пользователя:

alex@deb-11:~$ ps -u alex f -o pid,user,comm PID USER COMMAND 3620 alex sshd 3621 alex \_ bash 20049 alex \_ ps 3609 alex systemd 3610 alex \_ (sd-pam)

Или вывести в виде дерева информацию по программе:

alex@deb-11:~$ ps -C apache2 f -o pid,user,comm PID USER COMMAND 3753 root apache2 19634 www-data \_ apache2 19635 www-data \_ apache2

Выше наглядно видно что процесс apache2 запущенный от пользователя root запускает рабочие процессы от пользователя www-data.

Читайте также:  Метод дерева решений статья

Утилита ps и состояния процессов

Утилита ps может выводить состояния процессов, рассмотрим эти состояния:

  • D — беспробудный сон, ожидая ввод/вывод какого-нибудь устройства;
  • I — бездействующий поток ядра;
  • R — готов выполнятся или уже выполняется процессором;
  • S — сон, ожидает каких-нибудь ресурсов;
  • T — остановлен сигналом;
  • t — остановлен дебагом;
  • X — мертвый, никогда не должно быть видно;
  • Z — зомби, мертвый но не погребенный, то есть не успел освободить pid;
  • — высокий приоритет;
  • N — низкий приоритет;
  • L — страницы процесса заблокированы в памяти;
  • s — лидер сессии;
  • l — многопоточный;
  • + — выполняется на переднем плане, то есть это не фоновый процесс.

Например, пробежимся по некоторым процессам:

alex@deb-11:~$ ps -e -o user,pid,stat,comm USER PID STAT COMMAND root 1 Ss systemd - является лидером сессии root 2 S kthreadd root 5 S< kworker/0:0H - работает с высоким приоритетом *** root 18 S kcompactd0 root 19 SN ksmd - работает с низким приоритетом root 22 S< crypto *** root 159 Ss systemd-journal - является лидером своей сессии root 168 S kauditd root 184 Ss systemd-udevd - является лидером своей сессии root 210 S< edac-poller root 279 Ssl rsyslogd - является лидером сессии и многопоточный *** alex 696 Ss systemd - лидер сессии (это я подключился по ssh) alex 698 S (sd-pam) alex 708 R sshd - процесс выполняется (я работаю по ssh) alex 713 Ss bash *** root 2608 R+ ps - на переднем плане (я запустил ps)

Итог

Мы познакомились с командой ps которой удобно исследователь процессы.

Изучили следующие опции ps:

  • a — все процессы с управляющим терминалом;
  • x — все процессы без управляющего терминала;
  • -e — все процессы;
  • u — больше информации;
  • -p — информация по конкретному процессу;
  • -u — процессы пользователя;
  • -g — процессы группы;
  • -C — процессы приложения;
  • L — доступные поля для формирования настраиваемого вывода;
  • -o — выбираем что выводить в настраиваемом выводе;
  • f — вывод в виде дерева;

А ещё я показал как обозначаются различные состояний процессов в выводе 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 — текущее состояние процесса. Могут принимать значения:
    1. R — выполнимый процесс;
    2. S — спящий;
    3. D — в состоянии подкачки на диске;
    4. T — остановлен;
    5. Z — зомби.
    6. W — не имеет резидентных страниц;
    7. < —высоко-приоритетный;
    8. N — низко-приоритетный;
    9. 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 — команда, которая запустила процесс.

Источник

Читайте также:  От чего качаются деревья
Оцените статью