# 📘 Полный мануал по процессам в 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.