5. Управление процессами
Что такое процесс?
Заголовок раздела «Что такое процесс?»Процесс — это запущенная программа. У каждого процесса есть уникальный идентификатор (PID — Process ID), родительский процесс (PPID), владелец, использование CPU и памяти.
Понимание процессов — ключ к диагностике проблем с производительностью и зависшими программами.
ps — список процессов
Заголовок раздела «ps — список процессов»ps # процессы текущей сессииps aux # все процессы всех пользователейps aux | grep nginx # найти конкретный процессps -ef # расширенный формат с PPIDps -u username # процессы конкретного пользователяps --sort=-%cpu # сортировать по CPUps --sort=-%mem # сортировать по памятиКолонки в ps aux:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.1 16952 1092 ? Ss 10:00 0:01 /sbin/initVSZ— виртуальная память (KB)RSS— реальная физическая память (KB)STAT: R=running, S=sleeping, Z=zombie, T=stopped
top — интерактивный монитор
Заголовок раздела «top — интерактивный монитор»top # запустить toptop -u username # только процессы пользователяtop -p 1234 # только конкретный PIDГорячие клавиши в top:
q— выходk— убить процесс (введи PID)M— сортировать по памятиP— сортировать по CPU1— показать все ядра CPUh— справка
htop — улучшенный top
Заголовок раздела «htop — улучшенный top»htop — цветной, удобный, интерактивный монитор. Нужно установить:
sudo apt install htop # Debian/Ubuntusudo yum install htop # CentOS/RHELhtop # запуститьhtop -u username # фильтр по пользователюФичи htop:
- Цветные индикаторы CPU и памяти
- Мышь работает!
- F5 — дерево процессов
- F9 — послать сигнал
- F6 — сортировка
/— поиск
kill — завершение процессов
Заголовок раздела «kill — завершение процессов»kill 1234 # завершить процесс по PID (SIGTERM)kill -9 1234 # принудительно убить (SIGKILL)kill -15 1234 # мягкое завершение (SIGTERM, по умолчанию)kill -SIGSTOP 1234 # приостановить процессkill -SIGCONT 1234 # возобновить процессkillall nginx # убить все процессы с именем nginxpkill -f "python app.py" # убить по части имениОсновные сигналы:
| Сигнал | Число | Значение |
|---|---|---|
| SIGTERM | 15 | Вежливое завершение |
| SIGKILL | 9 | Принудительное завершение |
| SIGSTOP | 19 | Пауза |
| SIGCONT | 18 | Продолжить |
| SIGHUP | 1 | Перезагрузить конфигурацию |
Управление фоновыми процессами
Заголовок раздела «Управление фоновыми процессами»Запуск в фоне с &
Заголовок раздела «Запуск в фоне с &»long_process & # запустить в фоне# [1] 12345 # [номер задачи] PID
./server.js & # запустить сервер в фонеecho $! # PID последнего фонового процессаbg и fg — управление заданиями
Заголовок раздела «bg и fg — управление заданиями»# Запусти процесс и нажми Ctrl+Z для паузыsome_command# ^Z# [1]+ Stopped some_command
jobs # список заданийbg # продолжить последнее задание в фонеbg %1 # продолжить задание №1 в фонеfg # вернуть последнее задание на передний планfg %2 # вернуть задание №2nohup — запуск без привязки к терминалу
Заголовок раздела «nohup — запуск без привязки к терминалу»nohup ./server.js & # продолжит работу после выхода из терминалаnohup python app.py > app.log 2>&1 & # с перенаправлением выводаnohup защищает процесс от сигнала HUP, который посылается при закрытии терминала.
Мониторинг ресурсов
Заголовок раздела «Мониторинг ресурсов»free -h # использование памятиvmstat 1 # статистика каждую секундуiostat 1 # статистика I/Odf -h # использование дискаdu -sh /var/log/ # размер директорииlsof -p 1234 # открытые файлы процессаlsof -i :8080 # какой процесс слушает порт 8080Приоритет процессов: nice
Заголовок раздела «Приоритет процессов: nice»nice -n 10 ./heavy_task # запустить с пониженным приоритетом (10)nice -n -20 ./urgent_task # с высоким приоритетом (нужны права root)renice 15 -p 1234 # изменить приоритет работающего процессаПриоритет (nice) от -20 (высший) до 19 (низший). По умолчанию 0.
Практика
Заголовок раздела «Практика»# 1. Посмотри все процессыps aux | head -20
# 2. Найди свои процессыps -u $USER
# 3. Запусти sleep в фонеsleep 300 &echo "PID: $!"
# 4. Посмотри заданияjobs
# 5. Переключись между фоном и передним планомfg %1# Ctrl+Z для паузыbg %1
# 6. Убей процессkill %1
# 7. Запусти нагрузочный процесс и найди в topyes > /dev/null &TOP_PID=$!top -bn1 | grep yeskill $TOP_PIDУправление процессами — основа системного администрирования и отладки!