Я запускаю приложение C ++ на xubuntu и реализовал обработчик сигнала, который обрабатывает SIGINT.Моя реализация должна быть в порядке, так как она работает на всех других машинах (той же ОС) - кроме моей.«Работа» означает, что сигнал принимается потоком обработчика сигналов и выполняется контролируемое отключение.
На моей машине ctrl + c просто убивает мое приложение.Никакой обработки, только «^ C» на консоли.
У кого-нибудь есть идея, почему это поведение зависит от машины?Могу ли я проверить какие-либо настройки?Спасибо.
РЕДАКТИРОВАТЬ: чтобы увидеть, связано ли это с поведением терминала ctrl + c, я попытался убить -2 PID вместо ctrl + c: такое же поведение, без обработки на моей машине, обработка, как ожидалось на других машинах.
Вот пример кода моего обработчика сигналов:
std::atomic_bool shutdown_requested;
void SignalHandler() {
sigset_t signal_set;
sigemptyset(&signal_set);
sigaddset(&signal_set, SIGTERM);
sigaddset(&signal_set, SIGINT);
while (!shutdown_requested) {
int sig = SIGUNUSED;
sigwait(&signal_set, &sig);
switch (sig) {
case SIGINT:
case SIGTERM:
shutdown_requested = true;
break;
}
}
}
void SetSignalHandler() {
sigset_t signals;
sigfillset(&signals);
pthread_sigmask(SIG_SETMASK, &signals, nullptr);
std::thread(SignalHandler);
}
Atomic shutdown_requested сигнализирует об отключении основного потока.Есть идеи?