Я пытаюсь поймать SIGTERM в моей программе, это проблема.
Моя программа запускается и настраивает прослушиватель для сигнала SIGTERM.Затем программа входит в цикл, который непрерывно проверяет дескриптор файла сокета, используя select, чтобы он не блокировался. Когда я отправляю программу TERM через kill, программа подтверждает, что она получает сигнал, но это не возвращает в цикл, который я описал ранее..
Обработчик сигнала устанавливает открытую переменную внутри класса, чтобы цикл знал о выходе.Я должен отметить, что в GDB это работает, но вне GDB это не так.
Заранее спасибо.
class A
{
public:
bool volatile stop;
void loop();
{
while(!stop)
{
//check socket
}
}
};
A *aptr;
void sigterm_handler(int i)
{
aptr->stop = true;
}
int main()
{
A a;
aptr = &a;
struct sigaction sa;
sa.sa_handler = &sigterm_handler;
sigaction(SIGTERM, &sa, NULL);
a.stop = false;
a.loop();
}
РЕДАКТИРОВАТЬ: извините, код не был завершен правильно.