Показ процессов Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Управление процессами является фундаментальным аспектом администрирования системы Linux. Каждая программа или команда, которую вы запускаете в Linux, создает процесс, и мониторинг этих процессов является важным для поддержания производительности системы и устранения неполадок.

В этом лабораторном занятии (LabEx) вы научитесь использовать команду ps, которая представляет собой мощный инструмент для мониторинга и управления процессами, запущенными в системе Linux. Понимая, как использовать команду ps и ее различные параметры, вы получите ценную информацию о том, что происходит в вашей системе в любой момент времени.

В рамках этого лабораторного занятия вы научитесь отображать процессы в различных форматах, просматривать все системные процессы и понимать подробную информацию, которую ps может предоставить о каждом процессе.

Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня начальный с процентом завершения 100%. Он получил 95% положительных отзывов от учащихся.

Понимание базовой информации о процессах

В Linux каждая запущенная программа или команда представлена процессом. Каждый процесс имеет уникальный идентификатор, известный как идентификатор процесса (Process ID, PID). Команда ps позволяет вам просматривать эти процессы и получать информацию о них.

Начнем с изучения базового использования команды ps.

Базовая команда ps

  1. Откройте терминал в среде LabEx. Вы должны находиться в каталоге ~/project.

  2. Введите следующую команду и нажмите Enter:

ps
  1. Вы увидите вывод, похожий на следующий:
  PID TTY          TIME CMD
  188 pts/0    00:00:00 zsh
  449 pts/0    00:00:00 ps

Попытаемся понять, что означает этот вывод:

  • PID: Идентификатор процесса (Process ID), уникальный номер, присвоенный каждому процессу
  • TTY: Тип терминала, указывающий, на каком терминале запущен процесс
  • TIME: Количество времени ЦП, использованное процессом
  • CMD: Команда, которая запустила процесс

В этом примере вы можете увидеть:

  • Процесс оболочки zsh (ваша текущая сессия терминала)
  • Команду ps, которую вы только что запустили

По умолчанию команда ps показывает только процессы, связанные с текущей сессией терминала. Это полезно для быстрой проверки, какие команды вы недавно выполнили, но оно не дает полной картины того, что происходит в вашей системе.

Попробуйте выполнить другую команду, а затем снова запустите ps, чтобы увидеть, как изменится вывод:

echo "Hello, world"
ps

Вы заметите, что команда echo не появляется в списке процессов. Это потому, что она запустилась и завершилась так быстро, что к тому времени, когда вы выполнили команду ps, она уже не была запущена.

Просмотр всех системных процессов

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

Чтобы получить более полную картину того, что происходит в вашей системе, вы можете использовать опцию -e с командой ps.

Использование команды ps -e для просмотра всех процессов

  1. В терминале введите следующую команду и нажмите Enter:
ps -e
  1. Вы увидите гораздо более длинный список процессов, похожий на следующий:
  PID TTY          TIME CMD
    1 ?        00:00:00 init.sh
   22 ?        00:00:00 supervisord
   23 ?        00:00:00 sshd
   32 ?        00:00:00 dbus-daemon
   35 ?        00:00:00 xfce4-session
   ···

Этот вывод показывает все процессы, запущенные в системе, а не только те, которые связаны с вашим терминалом. Обратите внимание, что у многих процессов в столбце TTY стоит ?. Это означает, что эти процессы не связаны ни с каким терминалом.

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

Многие из процессов, которые вы видите, являются системными службами, работающими в фоновом режиме. Например:

  • init.sh (PID 1) - это первый процесс, запускаемый при загрузке системы
  • supervisord - это система управления процессами
  • sshd - это демон SSH-сервера
  • dbus-daemon - это демон сообщений D-Bus
  • xfce4-session - это часть рабочего окружения Xfce

Эти процессы обрабатывают различные системные функции и обеспечивают услуги, благодаря которым ваша система Linux становится пригодной для использования.

Подсчет количества процессов

Если вы хотите узнать, сколько процессов в настоящее время запущено в вашей системе, вы можете передать вывод команды ps -e в команду wc:

ps -e | wc -l

Отображаемое число представляет собой общее количество процессов, запущенных в вашей системе, плюс одна строка для заголовка.

Отображение подробной информации о процессах

Теперь, когда вы можете просматривать все процессы, запущенные в вашей системе, давайте узнаем, как получить более подробную информацию о каждом процессе. Опция -f для команды ps предоставляет "полный формат" списка с дополнительными деталями.

Использование команды ps -ef для получения подробной информации

  1. В терминале введите следующую команду и нажмите Enter:
ps -ef
  1. Вы увидите вывод, похожий на следующий:
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 16:45 ?        00:00:00 /bin/bash /etc/shiyanlou/sbin/init.sh
root          22       1  0 16:45 ?        00:00:00 /usr/bin/python3 /usr/bin/supervisord -n
root          23      22  0 16:45 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
labex        188     187  0 16:46 pts/0    00:00:00 -zsh
labex        677     188  0 16:55 pts/0    00:00:00 ps -ef

Этот формат предоставляет гораздо более подробную информацию о каждом процессе:

  • UID: Идентификатор пользователя (User ID), владельца процесса
  • PID: Идентификатор процесса (Process ID)
  • PPID: Идентификатор родительского процесса (Parent Process ID, процесс, который запустил текущий)
  • C: Использование ЦП (CPU utilization)
  • STIME: Время запуска процесса
  • TTY: Терминал, связанный с процессом
  • TIME: Время ЦП, использованное процессом
  • CMD: Полная команда с ее аргументами

Понимание отношений между процессами

Столбец PPID особенно полезен для понимания того, как процессы связаны друг с другом. Каждый процесс (за исключением самого первого) запускается другим процессом, образуя родительский - дочерний (parent - child) связь.

Например, в приведенном выше выводе:

  • Процесс с PID 1 (init.sh) имеет PPID 0 (это первый процесс)
  • Процесс с PID 22 (supervisord) имеет PPID 1 (он был запущен init.sh)
  • Процесс с PID 23 (sshd) имеет PPID 22 (он был запущен supervisord)

Эта иерархическая связь образует "дерево процессов", которое можно визуализировать с помощью специализированных инструментов, таких как pstree (не рассматривается в этом лабе).

Фильтрация информации о процессах

Вы можете комбинировать ps с grep для фильтрации определенных процессов. Например, чтобы найти все процессы, связанные с оболочкой zsh:

ps -ef | grep zsh

Это покажет все процессы, в именах команд которых есть "zsh".

Попробуйте поискать другие процессы в вашей системе:

ps -ef | grep bash

Эта комбинация ps с инструментами фильтрации делает ее мощной командой для мониторинга системы и устранения неполадок.

Сортировка информации о процессах и расширенные опции

Теперь, когда вы узнали о базовой информации о процессах и подробных списках, давайте рассмотрим некоторые дополнительные опции, которые делают команду ps еще более полезной.

Пользовательский формат с использованием ps

Команда ps позволяет создавать пользовательский вывод с определенной информацией, которая вас интересует. Опция -o позволяет указать, какие столбцы отображать:

ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu

Эта команда отображает:

  • Идентификатор процесса (pid)
  • Идентификатор родительского процесса (ppid)
  • Команду (cmd)
  • Процент использования ЦП (%cpu)
  • Процент использования памяти (%mem)

Параметр --sort=-%cpu сортирует процессы по использованию ЦП в порядке убывания (минус перед %cpu указывает на убывающий порядок).

Вы должны увидеть вывод, похожий на следующий:

  PID  PPID CMD                         %CPU %MEM
  789   788 ps -eo pid,ppid,cmd,%cpu,%  0.0  0.1
  188   187 -zsh                        0.0  0.1
   35    34 xfce4-session               0.0  0.2
   32     1 /usr/bin/dbus-daemon --sys  0.0  0.0
   23    22 sshd: /usr/sbin/sshd -D [l  0.0  0.1
   22     1 /usr/bin/python3 /usr/bin/  0.0  0.2
    1     0 /bin/bash /etc/shiyanlou/s  0.0  0.0

Поиск процессов, потребляющих много памяти

Если вы хотите определить, какие процессы используют больше всего памяти, вы можете отсортировать по использованию памяти:

ps -eo pid,user,cmd,%mem --sort=-%mem | head -n 6

Эта команда отображает топ-5 процессов, потребляющих память (плюс строка заголовка), с указанием их PID, пользователя, команды и процента использования памяти.

Понимание состояний процессов

Процессы могут находиться в разных состояниях. Давайте посмотрим на эту информацию:

ps -eo pid,stat,cmd

Столбец STAT показывает состояние процесса с использованием однобуквенных кодов:

  • R: Выполняется или готов к выполнению
  • S: В состоянии сна, прерываемом ожиданием
  • D: Непрерываемый сон (обычно связан с вводом-выводом)
  • Z: Зомби-процесс
  • T: Остановлен или отслеживается

После буквы статуса могут появиться дополнительные символы:

  • <: Высокий приоритет
  • N: Низкий приоритет
  • s: Лидер сессии
  • +: В группеForeground процессов

Эта информация помогает понять, что процессы делают в любой момент времени.

Иерархическое представление с помощью pstree

Хотя pstree не является частью самой команды ps, эта команда предоставляет визуальное представление иерархии процессов:

pstree

Это показывает отношения между процессами в виде дерева, что упрощает понимание того, как процессы связаны друг с другом.

Мониторинг процессов в реальном времени

В то время как команда ps предоставляет снимок процессов в определенный момент времени, иногда вам нужно непрерывно отслеживать процессы. В этом шаге мы рассмотрим инструменты для мониторинга процессов в реальном времени.

Использование команды top

Команда top предоставляет динамическое представление о работе системы в реальном времени. Она отображает обобщенную информацию о системе, а также список процессов или потоков, которые в данный момент управляются ядром Linux.

Запустите следующую команду:

top

Вы увидите что-то вроде этого:

top - 17:15:23 up 30 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  31 total,   1 running,  30 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1975.1 total,   1558.7 free,    180.4 used,    236.1 buff/cache
MiB Swap:    975.0 total,    975.0 free,      0.0 used.   1651.3 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    1 root      20   0    8988   3208   2556 S   0.0   0.2   0:00.07 init.sh
   22 root      20   0   39528   8596   6088 S   0.0   0.4   0:00.20 supervisord
   23 root      20   0   12128   6788   5864 S   0.0   0.3   0:00.00 sshd
   ...

Вывод разделен на две части:

  1. Обобщенная информация о системе (первые 5 строк)
  2. Список процессов (по умолчанию отсортирован по использованию ЦП)

Для выхода из top нажмите клавишу q.

Понимание вывода команды top

Обобщенная информация о системе содержит:

  • Время работы системы и средние нагрузки
  • Количество задач по состояниям (выполняются, спят, остановлены, зомби)
  • Разбивку использования ЦП
  • Использование памяти и свопа

Список процессов показывает:

  • PID: Идентификатор процесса
  • USER: Пользователь - владелец
  • PR: Приоритет
  • NI: Nice - значение
  • VIRT: Используемая виртуальная память
  • RES: Используемая физическая память
  • SHR: Общая память
  • S: Состояние процесса
  • %CPU: Использование ЦП
  • %MEM: Использование памяти
  • TIME+: Время ЦП, использованное процессом
  • COMMAND: Имя команды

Интерактивные команды в top

Во время работы top вы можете использовать различные клавиатурные команды для взаимодействия с ней:

  • Нажмите M, чтобы отсортировать по использованию памяти
  • Нажмите P, чтобы отсортировать по использованию ЦП
  • Нажмите k, а затем введите PID, чтобы убить процесс
  • Нажмите h для получения справки

Попробуйте нажать M во время работы top, чтобы увидеть процессы, отсортированные по использованию памяти.

Использование команды watch с ps

Другой подход к мониторингу в реальном времени - использование команды watch с ps. Эта команда периодически запускает другую команду и отображает вывод, позволяя вам видеть изменения со временем.

watch -n 1 'ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -n 6'

Эта команда обновляется каждую секунду и показывает топ - 5 процессов, потребляющих ЦП.

Для выхода из watch нажмите Ctrl+C.

Комбинация ps с утилитами, такими как watch, дает вам мощные возможности для мониторинга процессов системы в реальном времени.

Резюме

В рамках этого практического занятия вы научились важным навыкам мониторинга и управления процессами в системе Linux с использованием команды ps и связанных инструментов. Вот краткий обзор того, что вы изучили:

  1. Базовая информация о процессах: Вы научились использовать базовую команду ps для просмотра процессов, связанных с текущей сессией терминала, и поняли базовый формат вывода, включая PID, TTY, TIME и CMD.

  2. Просмотр всех процессов системы: Вы овладели использованием команды ps -e для просмотра всех запущенных на системе процессов, а не только тех, которые связаны с вашим терминалом.

  3. Подробная информация о процессах: Вы изучили команду ps -ef для получения подробной информации о процессах, включая идентификаторы пользователей, идентификаторы родительских процессов, время запуска и полные командные строки.

  4. Продвинутая сортировка и форматирование: Вы узнали, как создавать пользовательский вывод с определенными столбцами и параметрами сортировки с использованием ps -eo и параметра --sort.

  5. Мониторинг в реальном времени: Вы научились использовать команду top для динамического просмотра процессов в реальном времени и как комбинировать ps с другими утилитами, такими как watch, для непрерывного мониторинга.

Эти навыки являются фундаментальными для системного администрирования, устранения неполадок и мониторинга производительности в Linux - средах. Понимание того, какие процессы запущены и как они используют системные ресурсы, является важным для поддержания здоровья системы и диагностики проблем.

По мере дальнейшей работы с системами Linux способность эффективно мониторировать и управлять процессами станет одним из ваших самых ценных навыков.