Процессы и мониторинг
Разбираемся в жизненном цикле программ, управлении фоновыми задачами и инструментах отладки производительности.
⚙️ Что такое процесс?
Процесс — это программа, находящаяся в состоянии выполнения. Каждый процесс в системе имеет уникальные идентификаторы:
- PID (Process ID) — уникальный номер процесса.
- PPID (Parent Process ID) — идентификатор родительского процесса, который его запустил.
- UID — идентификатор пользователя, от имени которого запущен процесс.
🎭 Виды процессов
🌑 Фоновые
Выполняются в фоновом режиме, не ожидая ввода данных от пользователя. Работают параллельно с другими задачами.
🖥️ Интерактивные
Выполняются в рамках текущей сессии терминала, занимают его и ждут действий пользователя (например, vim или nano).
👻 Демоны
Системные службы, которые запускаются при старте системы и работают постоянно в фоновом режиме до выключения системы.
📊 Состояния процессов
В любой момент времени процесс находится в одном из состояний:
| Код | Состояние | Описание |
|---|---|---|
R |
Running | Процесс выполняется или готов к выполнению. |
S |
Sleeping | Процесс ожидает события (например, ввода-вывода). |
T |
Stopped | Процесс приостановлен сигналом. |
Z |
Zombie | Завершился, но родитель еще не обработал его статус. |
🔍 Инструменты мониторинга
Основные команды для работы со списком процессов:
ps aux— полный список всех процессов в системе.top/htop— интерактивный мониторинг в реальном времени.atop— расширенный мониторинг с историей нагрузки.jobs— список фоновых задач текущего сеанса.
Управление фоновыми задачами
Используйте 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.
📂 Файловая система /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) гораздо быстрее, чем через команды в терминале.
🏋️ Практические упражнения
Введение в процессы
- Найдите ваш shell-процесс через
ps -aux. - Определите процессы, потребляющие больше всего ресурсов.
- Выведите дерево процессов с помощью
pstree.
Показать решение
Создание и управление процессами
- Запустите
ping google.com > output.log &в фоне. - Верните его на передний план (
fg), приостановите и верните в фон. - Измените приоритет процесса
yes > /dev/null &черезrenice.
Показать решение
Мониторинг процессов
- Запустите
stress --cpu 2и посмотрите изменения вtop. - В
htopнайдите фоновый процесс и измените его Nice-значение. - Установите
atopи посмотрите накопленную статистику.
Показать решение
Подсказка: В htop для изменения приоритета используйте клавиши F7 (повысить приоритет) и F8 (понизить приоритет).
Файлы и процессы
- Изучите содержимое
/proc/[PID]/statдля любого активного процесса. - Найдите все открытые файлы процесса
cat > /dev/null &через/proc/[PID]/fd. - Сравните данные из
/proc/meminfoиfree -h.