2010-05-17 5 views
2

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

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

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

ответ

2

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

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

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

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

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

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