Мы используем Upstart для запуска/завершения встроенного двоичного кода.Имейте Gnu Screen Pass Сигнал SIGTERM к дочерним процессам, позволяя им полностью отключиться
В файле конфигурации Upstart для этого двоичного файла, мы определяем сценарий как таковой:
script
exec su - user -c "screen -D -m -S $product /opt/bin/prog /opt/cfg/$product -v 5 --max_log_size=7"
end script
Когда уровень запуска устанавливается на 5, Upstart запускает скрипт. Когда уровень запуска установлен в 3, Upstart завершает сценарий.
Моя проблема заключается в том, что Upstart отправляет SIGTERM, а затем SIGKILL.
SIGTERM «обрабатывается» экраном, а не моим обычным двоичным кодом, поэтому обработчики сигналов в нашем двоичном файле не получают SIGTERM и, следовательно, не могут быть закрыты чисто.
Я проверил, что обработчики сигналов в нашем двоичном файле позволяют полностью закрыть его, когда он НЕ запускается через экран.