Введение
Управление процессами является фундаментальным аспектом администрирования системы Linux. Каждая программа или команда, которую вы запускаете в Linux, создает процесс, и мониторинг этих процессов является важным для поддержания производительности системы и устранения неполадок.
В этом лабораторном занятии (LabEx) вы научитесь использовать команду ps, которая представляет собой мощный инструмент для мониторинга и управления процессами, запущенными в системе Linux. Понимая, как использовать команду ps и ее различные параметры, вы получите ценную информацию о том, что происходит в вашей системе в любой момент времени.
В рамках этого лабораторного занятия вы научитесь отображать процессы в различных форматах, просматривать все системные процессы и понимать подробную информацию, которую ps может предоставить о каждом процессе.
Понимание базовой информации о процессах
В Linux каждая запущенная программа или команда представлена процессом. Каждый процесс имеет уникальный идентификатор, известный как идентификатор процесса (Process ID, PID). Команда ps позволяет вам просматривать эти процессы и получать информацию о них.
Начнем с изучения базового использования команды ps.
Базовая команда ps
Откройте терминал в среде LabEx. Вы должны находиться в каталоге
~/project.Введите следующую команду и нажмите Enter:
ps
- Вы увидите вывод, похожий на следующий:
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 для просмотра всех процессов
- В терминале введите следующую команду и нажмите Enter:
ps -e
- Вы увидите гораздо более длинный список процессов, похожий на следующий:
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-Busxfce4-session- это часть рабочего окружения Xfce
Эти процессы обрабатывают различные системные функции и обеспечивают услуги, благодаря которым ваша система Linux становится пригодной для использования.
Подсчет количества процессов
Если вы хотите узнать, сколько процессов в настоящее время запущено в вашей системе, вы можете передать вывод команды ps -e в команду wc:
ps -e | wc -l
Отображаемое число представляет собой общее количество процессов, запущенных в вашей системе, плюс одна строка для заголовка.
Отображение подробной информации о процессах
Теперь, когда вы можете просматривать все процессы, запущенные в вашей системе, давайте узнаем, как получить более подробную информацию о каждом процессе. Опция -f для команды ps предоставляет "полный формат" списка с дополнительными деталями.
Использование команды ps -ef для получения подробной информации
- В терминале введите следующую команду и нажмите Enter:
ps -ef
- Вы увидите вывод, похожий на следующий:
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
...
Вывод разделен на две части:
- Обобщенная информация о системе (первые 5 строк)
- Список процессов (по умолчанию отсортирован по использованию ЦП)
Для выхода из 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 и связанных инструментов. Вот краткий обзор того, что вы изучили:
Базовая информация о процессах: Вы научились использовать базовую команду
psдля просмотра процессов, связанных с текущей сессией терминала, и поняли базовый формат вывода, включая PID, TTY, TIME и CMD.Просмотр всех процессов системы: Вы овладели использованием команды
ps -eдля просмотра всех запущенных на системе процессов, а не только тех, которые связаны с вашим терминалом.Подробная информация о процессах: Вы изучили команду
ps -efдля получения подробной информации о процессах, включая идентификаторы пользователей, идентификаторы родительских процессов, время запуска и полные командные строки.Продвинутая сортировка и форматирование: Вы узнали, как создавать пользовательский вывод с определенными столбцами и параметрами сортировки с использованием
ps -eoи параметра--sort.Мониторинг в реальном времени: Вы научились использовать команду
topдля динамического просмотра процессов в реальном времени и как комбинироватьpsс другими утилитами, такими какwatch, для непрерывного мониторинга.
Эти навыки являются фундаментальными для системного администрирования, устранения неполадок и мониторинга производительности в Linux - средах. Понимание того, какие процессы запущены и как они используют системные ресурсы, является важным для поддержания здоровья системы и диагностики проблем.
По мере дальнейшей работы с системами Linux способность эффективно мониторировать и управлять процессами станет одним из ваших самых ценных навыков.



