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.

Читайте также:  Модули ядра linux android

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

Вы уже познакомились с опцией 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.

Читайте также:  Install windows software linux system

Утилита 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 дерево процессов команда

ИМЯ

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).

Источник

Оцените статью
Adblock
detector