У меня небольшая проблема: если я выполняю код, который находится внутри функции-обработчика в основном (вместо вызова kill), маска работает надежно и блокирует SIGINT. Если я попытаюсь добавить маску сигнала к вызову SIGUSR2, как в приведенном ниже коде, маска не маскирует никакие сигналы SIGINT. В чем проблема?
pid_t parent_pid;
sigset_t mask;
int main(void) {
signal(SIGINT, handleSigint);
signal(SIGUSR2, handleSigUSR2);
signal(SIGUSR1, handleSigUSR1);
sleep(1);
kill(getpid(), SIGUSR2);
while (1) {
}
}
void handleSigUSR2(int sig) {
signal(SIGUSR2, handleSigUSR2);
printf("StartUSR2\n");
if (sigaddset(&mask, SIGINT) != 0) {
printf("Error with addset\n");
}
if (sigprocmask(SIG_BLOCK, &mask, NULL) != 0) {
printf("Error with sigprocmask\n");
}
printf("EndUSR2\n");
}