TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
BashTex | Linux

7 Sep, 11:06

Открыть в Telegram Поделиться Пожаловаться

KillMode=: почему systemctl stop иногда оставляет процессы

Остановить сервис через:

systemctl stop myapp.service

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

Это KillMode=.

▪️Например:

[Service]
ExecStart=/opt/myapp/start.sh
KillMode=control-group

По умолчанию systemd работает с control group сервиса. При остановке он может завершить все процессы внутри cgroup, а не только основной PID.
Проверить:

systemctl show myapp.service -p KillMode

▪️Самый интересный вариант - process

[Service]
KillMode=process

В этом режиме сигнал отправляется только основному процессу сервиса.

Если start.sh породил:

myapp
├─ worker1
└─ worker2

дочерние процессы могут продолжить работу после остановки unit.

▪️control-group

[Service]
KillMode=control-group

systemd отслеживает cgroup целиком:

myapp.service
├─ PID 1200
├─ PID 1201
└─ PID 1202

При остановке unit процессы внутри группы также попадут под завершение.

▪️Проверить, кто реально принадлежит сервису

systemctl status myapp.service

или:

systemctl show myapp.service -p ControlGroup

Затем:

systemd-cgls

Можно увидеть дерево процессов по cgroup.

▪️Ещё один режим

KillMode=mixed

При остановке SIGTERM получает основной процесс, а при последующем принудительном завершении systemd применяет его ко всей control group.

Это позволяет дать главному процессу шанс корректно завершиться, не оставляя дочерние процессы навсегда.

▪️Почему это важно

Особенно легко получить «призраков» при запуске приложения через shell-обёртку:

ExecStart=/bin/bash /opt/start.sh

Если скрипт запускает фоновые процессы, нужно понимать, в какой cgroup они окажутся и как KillMode повлияет на их завершение.

systemctl stop - это не просто отправка SIGTERM одному PID. В systemd процесс существует внутри cgroup, и политика KillMode определяет масштаб остановки.

BashTex 📱 #bash #linux

503 0 27 6
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot