Linux, обработка сигнала к потомку
У меня есть сервис для Linux, назовем его dispatcher
, который запускает другие сервисы (service
) и всячески их контролирует.
Одной из задач dispatcher
является установка политики планировщика для каждого service
(подобно man chrt
), при этом, для реалтаймовых планировщиков: rr, fifo
, нужно обрабатывать сигнал SIGXCPU
, который посылается ядром, когда процесс service
превысил допустимые лимиты на ресурсы (man prlimit
). dispatcher
должен тоже реагировать на этот сигнал и выполнять с проблемным service
какое-либо действие.
Однако сервисы, через API dispatcher'а
обрабатывают и другие сигналы.
Есть ли способ поймать этот сигнал, посланный к service
в dispatcher
? При этом не навредив логике обработки остальных сигналов?
Я читал про process groups, но это, кажется, не подходит, т.к services
должны обрабатывать и другие сигналы.
Если и можно сделать это через process groups, то как мне фильтровать сигналы?
SIGXCPU
должен обрабатывать dispatcher
, а, например SIGTERM, SIGHUP
должны оказываться для каждого service
и для dispatcher
уместными только для них самих, а не для всей группы процессов.