Приложение запусткает два потока, в основном потоке и дополнительных регистрируются функции обработки сигналов.
основной поток
Код: Выделить всё
static int prepare_signal(void)
{
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = sig_work;
sa.sa_flags = SA_RESTART;
if (sigemptyset(&sa.sa_mask))
return -1;
if (sigaddset(&sa.sa_mask, SIGINT))
return -1;
if (sigaction(SIGINT, &sa, NULL))
return -1;
sa.sa_handler = sig_work;
sa.sa_flags = SA_RESTART;
if (sigemptyset(&sa.sa_mask))
return -1;
if (sigaddset(&sa.sa_mask, SIGTERM))
return -1;
if (sigaction(SIGTERM, &sa, NULL))
return -1;
return 0;
}Завершение дополнительных потоков производится сигналом SIGQUIT.
дополнительные потоки
Код: Выделить всё
static int prepare_signal(void)
{
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = sig_work;
sa.sa_flags = SA_RESTART;
if (sigemptyset(&sa.sa_mask))
return -1;
if (sigaddset(&sa.sa_mask, SIGQUIT))
return -1;
if (sigaction(SIGQUIT, &sa, NULL))
return -1;
/*if (pthread_sigmask(SIGQUIT, &sa.sa_mask, NULL))
return -1;*/
return 0;
}Отправка сигнала в поток производится через pthread_kill, пока дополнительный поток был один всё работало, после добавления ещё одного потока регистрация обработчика в потоках проходит нормально, но срабатывает он только в одном из дополнительных потоках.
Вопрос - как правильно регистрировать обработчик сигналов в дополнительных потоках?
Спасибо.