Поведение во время выполнения

Поведение во время выполнения

Процессы и услуги

Как Linux запускает программы, отслеживает процессы, обрабатывает сигналы, управляет фоновыми заданиями, запускает службы и записывает журналы.

Аудитория
Пользователи рабочего стола, разработчики и администраторы
Время чтения
21 мин
Идентичность процесса
PID
Общая инициализация
systemd
Чистый сигнал остановки
SIGTERM

Что такое процесс

Процесс — это работающий экземпляр программы. Он имеет идентификатор процесса, родительский процесс, память, открытые файлы, переменные среды, разрешения и состояние планирования.

Программы — это файлы на диске. Процессы выполняются в реальном времени. Запуск /usr/bin/ssh создает процесс ssh. Запуск его дважды создает два процесса.

Что такое процесс диаграмма
systemd PID 1корень user space
sshdудаленный вход
оболочкаинтерактивный потомок
службадемон
workerдочерний процесс

Родительские и дочерние процессы

Процессы образуют дерево. Ваш терминал запускает оболочку. Оболочка запускает команды как дочерние процессы. Услуги могут начать рабочие дети. Когда родительский элемент завершает работу, дочерние элементы перезапускаются или останавливаются в зависимости от того, как они были запущены.

Просмотр дерева помогает объяснить, почему закрытие терминала может остановить запуск программ с него и почему службами следует управлять с помощью systemd, а не запускать их вручную в случайной оболочке.

Задания на переднем и заднем плане

Задание переднего плана владеет терминалом до тех пор, пока оно не завершится, не приостановится или не будет прервано. Фоновое задание продолжается, пока оболочка принимает дополнительные команды. Управление заданиями оболочки полезно для интерактивной работы, но не является диспетчером служб.

Запуск команды в фоновом режиме
long-command &
jobs
fg %1

Состояния и сигналы процесса

Процессы могут быть запущенными, спящими, остановленными, зомбированными или ожидающими ввода-вывода. Процесс, не потребляющий ЦП, может все еще быть активным, поскольку он ожидает диска, сети, таймеров или ввода.

Сигналы — это сообщения, отправляемые процессам. SIGTERM просит процесс завершиться. SIGKILL вызывает немедленное прекращение действия. SIGHUP часто просит демоны перезагрузить конфигурацию, в зависимости от программы.

Состояния и сигналы процесса
SignalMeaningИспользуйте осторожно, потому что
SIGTERMЗапросить чистое прекращениеПроцессу может потребоваться время для завершения
SIGKILLПринудительное прекращениеОчистка невозможна
SIGHUPЗапрос на отключение или перезагрузкуПоведение зависит от программы
SIGSTOPПриостановить процессОн не может быть уловлен процессом

systemd, службы и демоны

Демон — это фоновый процесс, который предоставляет такие службы, как SSH, печать, ведение журнала, кэширование DNS, базу данных или веб-сервер. systemd — это система инициализации и менеджер служб, используемая во многих дистрибутивах.

Модули systemd описывают, как службы запускаются, останавливаются, перезапускаются, зависят от других модулей, записывают выходные данные и участвуют в загрузке. Служба может быть активной сейчас, не будучи включенной при загрузке, или включенной при загрузке, но не запущенной в данный момент.

systemd, службы и демоны диаграмма
отключенане при загрузке
включенастартует при загрузке
активнаработает сейчас
журналлоги

Включение, отключение, запуск и остановка

start и stop влияют на текущую загрузку. включение и отключение влияют на поведение будущей загрузки. перезапуск останавливает и запускает службу. reload просит службу перечитать конфигурацию без полного перезапуска, если она поддерживает эту операцию.

Проверить услугу
systemctl status ssh
Запустите сейчас и включите при загрузке
sudo systemctl enable --now ssh
Чтение журналов обслуживания
journalctl -u ssh --since today

Процесс загрузки и входа в систему

После того, как ядро ​​запускает первый процесс пользовательского пространства, systemd вызывает цели и службы. На сервере путь может заканчиваться текстовым логином или службой SSH. На рабочем столе процесс продолжается через диспетчер дисплея и сеанс рабочего стола.

При устранении неполадок при запуске спросите, на каком этапе произошел сбой: загрузка ядра, запуск модуля systemd, менеджер входа в систему, сеанс рабочего стола или файл конфигурации пользовательской оболочки.