Процессы: создание, мониторинг, сигналы [103.5]

Рейтинг: 71.7% · 16 голосов
Полный курс LPIC-1 (экзамены 101-500 и 102-500): архитектура, загрузка, пакеты, команды и текст, ФС и права, шелл-скрипты, пользователи, сервисы, сеть, безопасность. Debian и RHEL.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Процессы: создание, мониторинг, сигналы [103.5]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-1 и как устроен путь администратора
  2. Железо, устройства и модули ядра [101.1]
  3. Загрузка системы: от BIOS до systemd [101.2]
  4. systemd, цели и уровни выполнения [101.3]
  5. План разметки диска и swap [102.1]
  6. Загрузчик GRUB 2 [102.2]
  7. Разделяемые библиотеки [102.3]
  8. Управление пакетами в Debian: dpkg и apt [102.4]
  9. Управление пакетами RPM, DNF и Zypper [102.5]
  10. Linux как гость виртуализации [102.6]
  11. Командная строка Bash [103.1]
  12. Обработка текста фильтрами [103.2]
  13. Базовое управление файлами [103.3]
  14. Потоки, конвейеры и перенаправление [103.4]
  15. Процессы: создание, мониторинг, сигналы [103.5] (вы здесь)
  16. Приоритеты выполнения процессов [103.6]
  17. Регулярные выражения [103.7]
  18. Редактор vi и vim [103.8]
  19. Разделы и создание файловых систем [104.1]
  20. Целостность и обслуживание ФС [104.2]
  21. Монтирование файловых систем [104.3]
  22. Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты
  23. Жёсткие и символические ссылки
  24. FHS и поиск файлов в системе [104.7]
  25. Окружение и кастомизация оболочки [105.1]
  26. Урок 25. Написание простых bash-скриптов [105.2]
  27. Графика, рабочие столы и доступность
  28. Учётные записи пользователей и групп
  29. Автоматизация задач: cron, at, таймеры [107.2]
  30. Локализация и интернационализация [107.3]
  31. Системное время и синхронизация [108.1]
  32. Системное логирование [108.2]
  33. Основы почтового агента (MTA) [108.3]
  34. Печать и CUPS [108.4]
  35. Основы интернет-протоколов [109.1]
  36. Постоянная конфигурация сети [109.2]
  37. Диагностика сети [109.3]
  38. DNS на стороне клиента [109.4]
  39. Задачи администрирования безопасности [110.1]
  40. Настройка безопасности хоста [110.2]
  41. Шифрование данных: SSH и GnuPG [110.3]
Урок 14. Процессы: создание, мониторинг, сигналы [103.5]

Любая команда, которую вы запускаете в оболочке - это процесс. Администратор каждый день решает три задачи вокруг процессов: запустить нужное (и не потерять, когда закроется терминал), увидеть, что вообще происходит в системе (кто ест CPU и память), и аккуратно остановить то, что зависло или мешает. В этом уроке разберём управление задачами оболочки, инструменты наблюдения от ps до htop, механику сигналов и отсоединяемые сессии screen/tmux.

Изображение

Как это работает

Когда оболочка запускает программу, она делает fork (создаёт копию себя) и затем exec (загружает в эту копию код новой программы). Так рождается дочерний процесс со своим PID, и его родителем (PPID) становится оболочка. Все процессы выстроены в дерево, корень которого - systemd с PID 1.

Внутри оболочки запущенные команды группируются в задания (jobs). Задание может быть на переднем плане (foreground) - тогда оболочка ждёт его завершения и отдаёт ему клавиатуру, либо в фоне (background) - оболочка сразу возвращает приглашение. Символ & в конце команды отправляет её в фон. Это управление заданиями - функция самой оболочки, а не ядра.

Связь процесса с терминалом важна. У интерактивных процессов есть управляющий терминал. Когда вы закрываете терминал, ядро рассылает процессам этой сессии сигнал SIGHUP (hang up - исторически обрыв связи модема), и по умолчанию они умирают. Чтобы фоновая задача пережила выход, её отвязывают от терминала: nohup игнорирует HUP заранее, а disown убирает задание из таблицы заданий оболочки, чтобы та не слала ему HUP при выходе.

Сигналы - это асинхронные уведомления ядра процессу. У каждого есть номер и имя. TERM (15) - вежливая просьба завершиться, процесс может перехватить её и прибраться. KILL (9) и STOP - единственные, которые нельзя перехватить или проигнорировать: KILL убивает мгновенно силами ядра, STOP замораживает, CONT размораживает. HUP многие демоны трактуют как перечитать конфиг.

Команды и примеры

Управление заданиями в оболочке:

Код: Выделить всё

sleep 600 &          # запуск в фоне, оболочка печатает [1] 12345
jobs -l              # список заданий с PID
fg %1                # вернуть задание 1 на передний план
# Ctrl+Z останавливает текущий процесс (шлёт SIGTSTP)
bg %1                # продолжить остановленное задание в фоне
Чтобы задача пережила закрытие терминала:

Код: Выделить всё

nohup ./backup.sh > backup.log 2>&1 &   # вывод в файл, HUP игнорируется
# или для уже запущенного:
long_task &
disown -h %1          # снять задание с рассылки HUP
disown %1             # полностью убрать из таблицы заданий
Просмотр процессов. У ps два исторических диалекта ключей - BSD (без дефиса) и UNIX (с дефисом):

Код: Выделить всё

ps aux               # BSD-стиль: все процессы, с пользователями и ресурсами
ps -ef               # UNIX-стиль: то же дерево с PPID
ps -eo pid,ppid,stat,%cpu,%mem,comm --sort=-%cpu | head
ps axjf              # дерево процессов (forest)
Колонка STAT: R - выполняется/готов, S - спит прерываемо, D - непрерываемый сон (обычно ввод-вывод, такой процесс KILL не берёт), Z - зомби (завершился, но родитель не забрал статус), T - остановлен.

Интерактивный мониторинг:

Код: Выделить всё

top                  # классика: e/E переключают единицы, P - сорт по CPU, M - по памяти
htop                 # дружелюбнее: F9 шлёт сигнал, F5 - дерево, мышь работает
В RHEL/Fedora htop ставится через dnf install htop, в Debian/Ubuntu - apt install htop. В свежих системах присматривайтесь к btop - более наглядный преемник.

Поиск и завершение по имени:

Код: Выделить всё

pgrep -a nginx           # PID процессов nginx с командной строкой
pgrep -u www-data php    # с фильтром по пользователю
kill 12345               # по умолчанию TERM
kill -9 12345            # KILL, крайняя мера
kill -HUP $(pgrep nginx) # перечитать конфиг
killall firefox          # по точному имени
pkill -f 'python.*worker'  # по шаблону всей командной строки
kill -STOP 12345; kill -CONT 12345  # заморозить и разморозить
Наблюдение за нагрузкой:

Код: Выделить всё

uptime               # аптайм и load average за 1/5/15 минут
free -h              # память и swap в человекочитаемом виде
watch -n 2 'free -h; uptime'   # повтор каждые 2 сек, -d подсвечивает изменения
В load average считаются не только процессы на CPU, но и в состоянии D, поэтому высокий load при простое CPU - признак затыка в диске или сети.

Отсоединяемые сессии. Они держат процессы живыми независимо от вашего SSH-подключения и позволяют вернуться к ним позже:

Код: Выделить всё

tmux new -s work     # новая сессия с именем work
# Ctrl+b затем d - отсоединиться (detach), процессы продолжают работать
tmux ls              # список сессий
tmux attach -t work  # вернуться
# screen аналогично: screen -S work, Ctrl+a d, screen -r work
Частые грабли
  • Привычка сразу бить kill -9. KILL не даёт процессу закрыть файлы и сбросить буферы - возможна потеря данных и битые временные файлы. Сначала TERM, KILL только если не реагирует.
  • Процесс в состоянии D не убивается ничем, даже KILL: он ждёт ядро. Лечится устранением причины ввода-вывода, иногда только перезагрузкой.
  • nohup сам по себе не отправляет в фон - без & команда займёт терминал. Нужны оба: nohup ... &.
  • disown без -h убирает задание из таблицы, и вы больше не сможете обратиться к нему через fg/bg или %1.
  • killall на разных системах ведёт себя по-разному и сопоставляет по имени процесса; легко зацепить не то. pkill -f надёжнее, но шаблоном можно по ошибке убить и сам grep/команду поиска.
  • Зомби (Z) не едят ресурсы и не убиваются - их забирает родитель; чините или перезапускайте родителя, а не зомби.
  • top показывает %CPU больше 100 на многоядерной машине - это нормально, суммируются ядра (режим Irix).
Мини-лаба
  • Запустите sleep 300 &, затем yes > /dev/null &. Посмотрите оба через jobs -l.
  • Командой ps -eo pid,stat,%cpu,comm --sort=-%cpu | head найдите, что грузит CPU (это будет ваш yes).
  • Заморозьте его: kill -STOP %2, проверьте в top, что CPU освободился, потом kill -CONT %2.
  • Верните sleep на передний план через fg %1 и остановите его Ctrl+Z, затем верните в фон bg.
  • Запустите nohup ping -c 1000 127.0.0.1 > ping.log 2>&1 &, закройте терминал, откройте новый и убедитесь через pgrep -a ping, что процесс жив.
  • Завершите его сначала pkill ping (TERM), при необходимости pkill -9 ping.
  • Создайте сессию tmux new -s lab, запустите в ней top, отсоединитесь Ctrl+b d и вернитесь через tmux attach -t lab.
Контрольные вопросы
  • Чем отличается завершение процесса сигналом TERM от KILL и почему KILL нельзя перехватить?
  • Что делает disown -h и чем он отличается от nohup при защите фоновой задачи от закрытия терминала?
  • Какие ключи ps относятся к BSD-стилю, а какие к UNIX-стилю, и чем выводы aux и -ef различаются по смыслу?
  • Процесс висит в состоянии D и не реагирует на kill -9. Почему и что с этим делать?
  • Как послать сигнал HUP всем процессам nginx одной командой и что обычно делает демон, получив HUP?
  • Чем отсоединение сессии в tmux принципиально отличается от запуска команды через nohup ... &?
👍4 ❤️4 🔥 😄 🤔4
Аватара пользователя
lloydss
Сообщения: 2
Зарегистрирован: 20 май 2026, 06:32

Re: Процессы: создание, мониторинг, сигналы [103.5]

Сообщение lloydss »

А в чем разница между pkill и killall на практике? У меня killall node на сервере зацепил вообще все, а pkill -f отработал точечно
👍 ❤️ 🔥1 😄 🤔
Аватара пользователя
Ahughes
Сообщения: 1
Зарегистрирован: 19 май 2026, 21:48

Re: Процессы: создание, мониторинг, сигналы [103.5]

Сообщение Ahughes »

Поймал момент с nohup без амперсанда - терминал залип намертво, пришлось из соседнего ssh убивать. Теперь всегда пишу nohup ... & разом
👍 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Потоки, конвейеры и перенаправление [103.4]
Следующая глава →
Приоритеты выполнения процессов [103.6]

Все главы курса «LPIC-1: администратор Linux (101 + 102)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-1: администратор Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость