Ysa-k06-ru
Глава 6: Управление процессами в Unix/Linux
Введение
В Unix/Linux одновременно могут выполняться **десятки, сотни и даже тысячи программ**. Каждая запущенная программа или часть программы называется **процессом** (process).
Для системного администратора умение:
- смотреть, какие процессы запущены,
- понимать, сколько ресурсов они используют,
- запускать процессы в фоне,
- корректно завершать «зависшие» программы
— является **критически важным практическим навыком**.
В этой главе мы подробно разберём:
- что такое процесс,
- как наблюдать за процессами,
- как работать с процессами в bash,
- как завершать процессы с помощью `kill`.
---
Что такое процесс
- Процесс** — это экземпляр выполняемой программы.
Примеры процессов:
- веб-сервер `nginx`
- текстовый редактор `nano`
- команда `ls`
- демон `sshd`
Каждый процесс имеет:
- **PID** (Process ID) — уникальный идентификатор процесса
- владельца (пользователя)
- состояние (работает, спит, остановлен)
- потребление ресурсов (CPU, RAM)
---
Иерархия процессов
В Linux процессы образуют **дерево**:
- каждый процесс (кроме первого) имеет **родительский процесс**
- самый первый процесс — `init` или `systemd` (PID = 1)
Пример:
- `bash` → `nano`
- `bash` → `ls`
---
Просмотр процессов: ps
Команда `ps` показывает **снимок текущих процессов**.
Базовое использование
ps
Показывает только процессы текущего терминала.
Расширенный вывод (рекомендуется)
ps aux
Расшифровка:
- `a` — процессы всех пользователей
- `u` — формат с пользователем
- `x` — включая фоновые процессы
Пример вывода:
USER PID %CPU %MEM COMMAND root 1 0.0 0.1 systemd user 2345 1.2 3.4 firefox
Важные столбцы:
- **USER** — владелец процесса
- **PID** — идентификатор процесса
- **%CPU** — загрузка процессора
- **%MEM** — использование памяти
- **COMMAND** — команда/программа
---
Просмотр процессов в реальном времени: top
Команда `top` показывает процессы **в реальном времени**.
top
Особенности:
- обновляется каждые несколько секунд
- показывает нагрузку CPU, RAM, swap
- сортирует процессы по нагрузке
Полезные клавиши в `top`:
- `q` — выйти
- `P` — сортировка по CPU
- `M` — сортировка по памяти
- `k` — завершить процесс (по PID)
---
Process ID (PID)
- PID** — уникальный номер процесса.
Пример:
nano test.txt
В другом терминале:
ps aux | grep nano
Вы увидите PID процесса `nano`.
PID нужен для:
- мониторинга
- завершения процесса
- отладки
---
Процессы в bash
Запуск процесса в фоне
Добавьте `&` в конец команды:
sleep 60 &
Вывод:
[1] 3456
- `[1]` — номер задания (job)
- `3456` — PID процесса
Процесс выполняется в фоне, терминал свободен.
---
Просмотр фоновых задач
jobs
Пример:
[1]+ Running sleep 60 &
---
Перевод процесса в фон и обратно
- `Ctrl + Z` — приостановить процесс
- `bg` — продолжить в фоне
- `fg` — вернуть в передний план
Пример:
nano test.txt
Нажмите `Ctrl+Z`, затем:
bg
---
Завершение процессов: kill
Иногда процесс:
- завис
- потребляет слишком много ресурсов
- не отвечает
Для этого используется команда `kill`.
Завершение по PID
kill PID
Пример:
kill 3456
По умолчанию отправляется сигнал **SIGTERM (15)** — «корректное завершение».
---
Принудительное завершение
Если процесс не завершается:
kill -9 PID
Сигнал **SIGKILL (9)**:
- процесс немедленно уничтожается
- данные могут быть потеряны
- использовать **только в крайнем случае**
---
Поиск PID процесса
ps aux | grep firefox
Или:
pgrep firefox
---
Практические задания
Практика 1: Наблюдение за процессами
- Откройте терминал
- Выполните:
ps aux
- Найдите:
- systemd (PID 1)
- bash
- sshd (если есть)
---
Практика 2: top
- Запустите:
top
- Посмотрите:
- загрузку CPU
- использование памяти
- самый «тяжёлый» процесс
- Выйдите клавишей `q`
---
Практика 3: Фоновые процессы
- Запустите процесс:
sleep 300 &
- Проверьте:
jobs
- Найдите PID:
ps aux | grep sleep
---
Практика 4: Завершение процесса
- Завершите процесс `sleep`:
kill PID
- Убедитесь, что он завершён:
jobs
---
Практика 5 (важно): SIGKILL
- Запустите:
sleep 1000 &
- Завершите принудительно:
kill -9 PID
- Проверьте, что процесс исчез
---
Типичные ошибки новичков
- ❌ Использовать `kill -9` всегда
- ❌ Завершать системные процессы (PID 1!)
- ❌ Не проверять PID перед `kill`
- ❌ Работать под `root` без необходимости
---
Дополнительные материалы для самоподготовки
- `man ps`
- `man top`
- `man kill`
- `man jobs`
- `man bash`
- Книга: **"The Linux Command Line" – William Shotts**
- Практика в виртуальной машине (ломать — можно!)
---
Итог
После этой главы ученик должен уметь:
- понимать, что такое процесс
- находить процессы в системе
- анализировать нагрузку
- запускать процессы в фоне
- безопасно завершать программы
Это **основа реальной работы Unix System Administrator**.