Я не могу заблокировать сигнал в программе CLinux

Ответить
Anonymous
 Я не могу заблокировать сигнал в программе C

Сообщение Anonymous »

Я хотел убедиться, что sigset будет блокировать сигнал, поэтому я создал два sigaction: один для регулярной отправки пользовательских сигналов, а другой для того, чтобы терминал ждал, пока пользователь отправит сигнал, но странно то, что моя программа может перехватывать сигнал, отправленный пользователем, но не блокирует пользовательский сигнал

Код: Выделить всё

#include 
#include 
#include 

void handler(int sig) {
printf("ctrl c\n");
}

void handler1(int sig) {
printf("user sig\n");
}

int main() {
struct sigaction a;
a.sa_handler = &handler;
sigemptyset(&a.sa_mask);
sigaddset(&a.sa_mask, SIGUSR1);
a.sa_flags = 0;

struct sigaction b;
b.sa_handler = &handler1;
sigemptyset(&b.sa_mask);
b.sa_flags = 0;

sigaction(SIGINT, &a, NULL);
sigaction(SIGUSR1, &b, NULL);

while (1) {
sleep(1);
raise(SIGUSR1);
}

return 0;
}
если я продолжу нажимать Ctrl+C, так и должно быть

Код: Выделить всё

ctrl c
ctrl c
ctrl c
но на самом деле

Код: Выделить всё

^Cctrl c
user sig
^Cctrl c
user sig
^Cctrl c
user sig
^Cctrl c
user sig
это означает, что сигнал SIGINT не блокирует SIGUSR1
как мне поступить, что-то не так

Подробнее здесь: https://stackoverflow.com/questions/783 ... -c-program
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»