Два вопроса: завершение работы демона при получении сигнала и получение сообщения.
В контексте systemctl вы хотите, чтобы ваш обработчик сигнала вышел из программы. В противном случае, он просто «распечатает» сообщение и возобновит обработку. Попробуйте
void SigStop_Handler(int sig)
{
D(fprintf(stderr, "****************** HANDLED STOP SIGNAL ******************\n"));
printf("\n");
exit(sig+128) ;
}
Также, учитывая, что процесс запущен как демон, stdout не будет подключен к терминалу. Вместо этого он будет перенаправлен в файл журнала. Также предлагается использовать stderr для отправки сообщений вместо stdout (см. Код выше). Также обратите внимание на записи конфигурации StandardOutput
и StandardErrro
для вашей службы.
Задержка, которую вы наблюдаете в настоящее время, происходит из-за того, что 'systemctl' ждет несколько секунд после отправки сигнала TERM - давая демону изменение для завершения. ,Если демон не завершает свою работу добровольно, будет отправлен сигнал KILL, который заставит демона безоговорочно завершиться немедленно.