# 📘 Полный мануал по процессам в Linux
## 🧠 1. Что такое процесс в Linux
**Процесс** — это запущенная программа, которая выполняется в оперативной памяти и имеет:
- **PID (Process ID)** — уникальный идентификатор.
- **PPID (Parent PID)** — идентификатор родительского процесса.
- **UID / GID** — пользователь и группа, от имени которых процесс запущен.
- **State (состояние)** — например:
- `R` — running (выполняется)
- `S` — sleeping (ожидает)
- `D` — uninterruptible sleep (I/O)
- `T` — stopped
- `Z` — zombie (завершён, но не убран из таблицы)
- **Nice / Priority (приоритеты планировщика)**.
- **Command / Executable** — исполняемая команда и её аргументы.
---
## 🔍 2. Основные команды для работы с процессами
### 2.1. `ps` — просмотр процессов
#### Примеры:
```bash
ps # процессы текущего терминала
ps -e # все процессы
ps -ef # в полном формате (UID, PID, PPID, CMD)
ps aux # BSD-формат (часто используется)
```
#### Полезные опции:
| Опция | Значение |
|-------|-----------|
| `-e` | Все процессы |
| `-f` | Полный формат |
| `-u <user>` | Процессы пользователя |
| `--forest` | Иерархия (дерево) |
| `-o` | Пользовательский формат, напр.: `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu` |
#### Пример сортировки:
```bash
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head
```
---
### 2.2. `pstree` — дерево процессов
Показывает иерархию от `init` или `systemd`:
```bash
pstree
pstree -p # показывать PID
pstree -u # показывать пользователей
pstree -a # показывать аргументы команд
pstree -A # ASCII-графика
```
---
### 2.3. `top` — интерактивный монитор процессов
Запускает динамическое обновление списка процессов:
```bash
top
```
Клавиши в режиме top:
| Клавиша | Действие |
|----------|-----------|
| `P` | сортировка по CPU |
| `M` | сортировка по памяти |
| `T` | сортировка по времени |
| `1` | показать все CPU |
| `k` | завершить процесс (kill) |
| `r` | изменить приоритет (renice) |
| `q` | выйти |
---
### 2.4. `htop` — улучшенный вариант `top`
```bash
sudo apt install htop
htop
```
Особенности:
- Цветная визуализация CPU, памяти, swap.
- Удобная навигация и фильтрация (`F3`, `F4`, `F9`).
- Можно сортировать, убивать процессы, менять nice.
---
### 2.5. `atop` — продвинутый монитор ресурсов
```bash
sudo apt install atop
sudo atop
```
Показывает историю использования ресурсов (CPU, I/O, память, сеть) по каждому процессу.
Можно запускать в фоновом режиме для записи логов.
---
### 2.6. `pidof`, `pgrep`, `pkill`
| Команда | Назначение |
|----------|-------------|
| `pidof nginx` | PID процесса |
| `pgrep nginx` | то же, но поддерживает фильтры |
| `pkill nginx` | завершить процессы по имени |
| `pgrep -u user` | процессы пользователя |
| `pkill -f "python app.py"` | по полному пути |
---
### 2.7. `nice` и `renice` — приоритеты процессов
Приоритет в Linux: от **−20 (максимальный приоритет)** до **+19 (минимальный)**.
Обычные пользователи могут только *понижать* приоритет (увеличивать число).
```bash
nice -n 10 long_task.sh
renice -n 5 -p 1234
```
---
### 2.8. `kill`, `killall`, `xkill`
| Команда | Пример | Значение |
|----------|--------|----------|
| `kill PID` | `kill 1234` | отправить сигнал (по умолчанию SIGTERM) |
| `kill -9 PID` | `kill -9 1234` | принудительно завершить |
| `killall nginx` | завершить все процессы с именем |
| `xkill` | клик по окну GUI-приложения для убийства процесса |
---
### 2.9. `systemctl status` / `service status`
Если процесс запущен как systemd-сервис:
```bash
systemctl status nginx
systemctl stop nginx
systemctl restart nginx
```
---
### 2.10. `lsof` — открытые файлы и сокеты
```bash
sudo lsof -p 1234 # файлы, открытые процессом
sudo lsof -i :80 # процессы, слушающие порт 80
sudo lsof /var/log/syslog # кто использует файл
```
---
### 2.11. `strace` — системные вызовы процесса
Для анализа поведения:
```bash
sudo strace -p 1234
sudo strace -f -e open,read,write -p 1234
```
---
### 2.12. `pidstat` (из пакета `sysstat`)
Мониторинг нагрузки по процессам:
```bash
sudo apt install sysstat
pidstat 1
pidstat -p 1234 1
```
---
### 2.13. `watch` — периодическое выполнение
```bash
watch -n 1 "ps -eo pid,cmd,%cpu,%mem --sort=-%cpu | head"
```
---
### 2.14. `dstat`, `vmstat`, `iostat`
Для системных метрик в целом (дополняют `top`):
```bash
dstat -tcm
vmstat 1
iostat -xz 1
```
---
## ⚙️ 3. Управление процессами
| Команда | Описание |
|----------|-----------|
| `fg` | вернуть процесс на передний план |
| `bg` | продолжить фоновый процесс |
| `jobs` | список фоновых задач |
| `Ctrl+Z` | приостановить |
| `Ctrl+C` | прервать |
| `nohup command &` | запустить в фоне, игнорируя выход |
| `disown` | отвязать процесс от shell |
| `&` | запустить процесс в фоне |
---
## 🧩 4. Анализ зависших или подозрительных процессов
1. Проверить состояние:
```bash
ps -eo pid,stat,cmd | grep D
```
2. Проверить открытые дескрипторы:
```bash
lsof -p <PID>
```
3. Проверить CPU spikes:
```bash
top -H -p <PID>
```
4. Проверить потребление памяти:
```bash
pmap -x <PID>
```
5. Анализ системных вызовов:
```bash
strace -p <PID>
```
---
# 🐳 5. Анализ процессов в Docker
Контейнеры используют **изолированные PID namespaces**,
поэтому процессы в контейнере — это подмножество процессов хоста.
---
## 5.1. Просмотр процессов внутри контейнера
```bash
docker top <container>
docker exec -it <container> ps aux
docker exec -it <container> pstree -p
```
---
## 5.2. Сопоставление процессов контейнера и хоста
```bash
docker inspect -f '{{.State.Pid}}' <container>
pstree -p $(docker inspect -f '{{.State.Pid}}' <container>)
```
---
## 5.3. Использование `nsenter` для входа в namespace
```bash
PID=$(docker inspect -f '{{.State.Pid}}' <container>)
sudo nsenter -t $PID -a
```
---
## 5.4. Анализ потребления ресурсов контейнера
```bash
docker stats
cat /sys/fs/cgroup/<контейнер>/cpu.stat
cat /sys/fs/cgroup/<контейнер>/memory.current
```
---
## 5.5. Интеграция с systemd-cgtop
```bash
sudo systemd-cgtop
```
---
[[Управление ресурсами с помощью cgroups в Linux и Docker#Где находятся файлы cgroups для Docker]]
## 5.6. Слежение за процессами в контейнерах через `htop`
В `htop`:
- Нажми `F2 → Display options → Show cgroup names`.
---
## 5.7. Пример комплексного мониторинга
```bash
watch -n 2 "docker stats --no-stream && echo && ps -eo pid,cmd,%cpu,%mem --sort=-%cpu | head"
```
---
## 5.8. Инструменты продвинутого анализа
| Инструмент | Назначение |
|-------------|-------------|
| `ctop` | top для контейнеров |
| `cadvisor` | визуальное наблюдение метрик |
| `glances` | общий системный монитор |
| `sysdig` | глубокий анализ системных вызовов |
| `docker inspect` | метаданные контейнера |
---
# 🧾 Заключение
1. Изучи `ps`, `top`, `pstree`, `lsof`, `strace`.
2. Отслеживай ресурсы с `htop`, `pidstat`, `systemd-cgtop`.
3. Для Docker — `docker top`, `docker stats`, `nsenter`, `ctop`.
4. Комбинируй системные утилиты с наблюдением за cgroup и namespace.