Главная Темы Тема 6: Процессы и мониторинг
$
Главная Темы Упражнения Шпаргалка Ресурсы
06
Системное администрирование

Процессы и мониторинг

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

🕐 ~20 мин чтения 🟡 Уровень: средний

⚙️ Что такое процесс?

Процесс — это программа, находящаяся в состоянии выполнения. Каждый процесс в системе имеет уникальные идентификаторы:

  • PID (Process ID) — уникальный номер процесса.
  • PPID (Parent Process ID) — идентификатор родительского процесса, который его запустил.
  • UID — идентификатор пользователя, от имени которого запущен процесс.

🎭 Виды процессов

🌑 Фоновые

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

🖥️ Интерактивные

Выполняются в рамках текущей сессии терминала, занимают его и ждут действий пользователя (например, vim или nano).

👻 Демоны

Системные службы, которые запускаются при старте системы и работают постоянно в фоновом режиме до выключения системы.

📊 Состояния процессов

В любой момент времени процесс находится в одном из состояний:

Код Состояние Описание
R Running Процесс выполняется или готов к выполнению.
S Sleeping Процесс ожидает события (например, ввода-вывода).
T Stopped Процесс приостановлен сигналом.
Z Zombie Завершился, но родитель еще не обработал его статус.

🔍 Инструменты мониторинга

Основные команды для работы со списком процессов:

  • ps aux — полный список всех процессов в системе.
  • top / htop — интерактивный мониторинг в реальном времени.
  • atop — расширенный мониторинг с историей нагрузки.
  • jobs — список фоновых задач текущего сеанса.

Управление фоновыми задачами

bash jobs
user@linux:~$
sleep 100 &
# Запуск в фоне с помощью &
user@linux:~$
bg %1
# Продолжить выполнение задачи №1 в фоне
user@linux:~$
fg %1
# Вернуть задачу на передний план

Используйте Ctrl+Z для приостановки активного процесса.

📡 Сигналы и управление

Сигналы позволяют уведомлять процессы о событиях. Всего существует более 60 сигналов (просмотр: kill -l).

Сигнал Значение Описание
SIGHUP (1) Hangup Перезапуск процесса или разрыв соединения.
SIGINT (2) Interrupt Прерывание с клавиатуры (Ctrl+C).
SIGKILL (9) Kill Безусловное и немедленное завершение (нельзя игнорировать).
SIGTERM (15) Terminate Вежливая просьба завершиться (стандартный сигнал).
SIGSTOP (19) Stop Приостановка процесса.

Приоритеты (Nice)

Приоритет варьируется от -20 (высший) до +19 (низший). По умолчанию процесс запускается с 0.

nice & renice
user@linux:~$
nice -n 10 backup.sh
# Запуск с низким приоритетом
user@linux:~$
sudo renice -n -5 -p 1234
# Повышение приоритета работающего процесса (нужен sudo)

📂 Файловая система /proc

В Linux директория /proc — это виртуальная ФС, через которую ядро сообщает данные о системе и процессах.

  • /proc/[PID]/stat — общее состояние процесса.
  • /proc/[PID]/cmdline — полная команда запуска.
  • /proc/[PID]/fd — список открытых файловых дескрипторов.

Утилита lsof также позволяет увидеть, какие файлы и сетевые порты заняты процессом.

🧪 Стресс-тестирование и отладка

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

  • stress — создает нагрузку на CPU, память и I/O.
  • fio — профессиональный инструмент для тестирования дисковой подсистемы.
  • strace — отслеживание системных вызовов процесса к ядру.
📋
Логи: Все системные сообщения можно просматривать через journalctl.
Пример: journalctl -u nginx -f (логи nginx в реальном времени).
👨‍🏫

Советы

Никогда не начинайте с kill -9. Сначала отправляйте SIGTERM (15), чтобы процесс мог корректно закрыть файлы и сохранить данные. Используйте "девятку" только если процесс "завис" намертво.

Изучите htop — это стандарт де-факто для быстрой диагностики. Там можно искать процессы по имени (F3), менять приоритет (F7/F8) и убивать их (F9) гораздо быстрее, чем через команды в терминале.

🏋️ Практические упражнения

01

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

Новичок ~10 мин

  1. Найдите ваш shell-процесс через ps -aux.
  2. Определите процессы, потребляющие больше всего ресурсов.
  3. Выведите дерево процессов с помощью pstree.
💡 Показать решение
Терминал
user@linux:~$
ps -aux | grep $SHELL
# Поиск текущей оболочки
user@linux:~$
ps aux --sort=-%cpu | head -n 5
# ТОП-5 процессов по CPU
user@linux:~$
pstree -p
# Дерево процессов с указанием PID
02

Создание и управление процессами

Новичок ~15 мин

  1. Запустите ping google.com > output.log & в фоне.
  2. Верните его на передний план (fg), приостановите и верните в фон.
  3. Измените приоритет процесса yes > /dev/null & через renice.
💡 Показать решение
Терминал
user@linux:~$
ping google.com > output.log &
user@linux:~$
fg %1
# Перевод на передний план. Далее нажать Ctrl+Z для паузы
user@linux:~$
bg %1
# Возобновление в фоне
user@linux:~$
yes > /dev/null &
user@linux:~$
renice -n 15 -p [PID_ПРОЦЕССА_YES]
03

Мониторинг процессов

Средний ~20 мин

  1. Запустите stress --cpu 2 и посмотрите изменения в top.
  2. В htop найдите фоновый процесс и измените его Nice-значение.
  3. Установите atop и посмотрите накопленную статистику.
💡 Показать решение

Подсказка: В htop для изменения приоритета используйте клавиши F7 (повысить приоритет) и F8 (понизить приоритет).

atop
user@linux:~$
sudo apt install atop
user@linux:~$
atop -r /var/log/atop/atop_202...
# Чтение логаatop (путь зависит от даты лога)
04

Файлы и процессы

Средний ~15 мин

  1. Изучите содержимое /proc/[PID]/stat для любого активного процесса.
  2. Найдите все открытые файлы процесса cat > /dev/null & через /proc/[PID]/fd.
  3. Сравните данные из /proc/meminfo и free -h.
💡 Показать решение
Терминал
user@linux:~$
cat /proc/self/stat
# Информация о текущем процессе оболочки
user@linux:~$
ls -l /proc/[PID]/fd
# Показывает, куда направлены дескрипторы 0, 1, 2...
user@linux:~$
grep "MemTotal" /proc/meminfo