Откладывание обработки сигналов в Linux - PullRequest
2 голосов
/ 18 мая 2010

Я пытаюсь выяснить, как заблокировать сигнал в ядре Linux 2.4 (пространство пользователя) для вызова его обработчика, но оставить его доступным для обработки позже, желательно, как только я повторно активирую обработку указанного сигнала.

Функция sigprocmask, кажется, появляется во всех моих результатах поиска, но я не могу найти хорошее, четкое описание, которое объясняет, будет ли заблокированный сигнал "сохранен", обрабатываться позже, и если да, то где и как мне это сделать справиться с этим, когда я буду готов к этому.

Может кто-нибудь уточнить, что происходит, желательно с примером кода? Заранее спасибо.

1 Ответ

2 голосов
/ 18 мая 2010

Я действительно не могу сказать это лучше, чем справочная страница signal(7):

Сигнал может быть заблокирован , что означает, что оно не будет доставлено пока он не будет разблокирован. Между время, когда оно генерируется и когда доставляется сигнал, как говорят, 1008 * в ожидании *.

Каждый поток в процессе имеет независимая маска сигнала, которая указывает набор сигналов, которые Тема в настоящее время блокируется. поток может манипулировать своей сигнальной маской используя pthread_sigmask(3). В традиционный однопоточный приложение, sigprocmask(2) может быть используется для манипулирования маской сигнала.

Таким образом, вы можете заблокировать и разблокировать сигнал с помощью sigprocmask(). Если сигнал повышается, пока он заблокирован, обработчик не будет вызываться до тех пор, пока он не будет разблокирован. Если сигнал находится в состоянии ожидания, когда он разблокирован, обработчик сигнала будет вызываться как обычно.

Обратите внимание, что данный сигнал либо ожидает, либо нет; это не может быть "в ожидании дважды" (или больше). если сигнал повышается дважды, пока он заблокирован, он все равно будет доставлен только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...