2015-10-05 2 views
2

Я знаю, как ловушкой один сигналкак улавливать более одного сигнала в C++?

signal(SIGINT, handler); 

но есть способ поймать больше, чем один в то же самое время?

Я попытался signal (SIGINT or SIGQUIT, handler)

, но его не работает.

+1

Просто вызовите «сигнал» снова, один раз для каждого сигнала, который вы хотите обработать. –

+0

Вы имеете в виду регистрацию для нескольких сигналов ?? – basav

ответ

3

Что касается сигнала(), он является устаревшим

можно зарегистрировать для нескольких сигналов с помощью sigaction.

struct sigaction act; 
act.sa_handler = sighandler; 
sigaction(SIGINT, &act, 0); 
sigaction(SIGTERM, &act, 0); 

В обработчике вы получите знак, который вы можете использовать, чтобы различать их.

void sighandler(int signo) 
{ 
    if (signo == SIGTERM || signo == SIGINT) 
    { 

    } 
} 
+0

В качестве альтернативы вы можете передавать разные функции каждому вызову 'signal', который может быть немного чище, чем проверка аргумента' signo', если в коде обработчика нет никакого совпадения. –

+0

согласен, но это зависит от использования – basav

Смежные вопросы