Unix Man (Справочное руководство)



SIGSET(2) - часть 3


В принципе после возврата из обработчика сигнала процесс, получивший этот сигнал, должен возобновить свое выполнение в точке, где он был прерван. Однако, если сигнал ловится во время системных вызовов , , или , когда работает системный вызов sigpause или , которые задерживают возврат из-за наличия предварительно приостановленного процесса (или зомби-процесса), то будет выполняться обработчик сигнала, после чего прерванный системный вызов может возвратить вызывавшему процессу -1 со значением errno, установленным в EINTR.

sighold и sigrelse используются для установления критических областей кода. sighold соответствует поднятию уровня приоритета и удержанию сигнала, пока этот приоритет не будет снижен с помощью sigrelse. sigrelse восстанавливает реакцию системы на сигнал в предварительно заданную с помощью sigset.

sigignore устанавливает реакцию на сигнал sig в SIG_IGN (см. выше).

sigpause приостанавливает вызывающий процесс, пока он не получит сигнал; аналогично работает .Однако, при получениии удержании сигнала sig, он сбрасывается, и активизируется системная реакция на этот сигнал. Этот системный вызов полезен для проверки переменных, которые меняют свое значение при возникновении сигнала. При этом правильные действия таковы: вначале sighold используется для блокировки сигнала, затем проверяются переменные. Если онине изменились, то вызывается sigpause для ожидания сигнала. Вызов sigset потерпит крах, если выполнится одно из следующих условий:

[EINVAL] Сигнал sig имеет неверное значение (включая SIGKILL), или обработка sig по умолчанию не может быть изменена. [EINTR] Сигнал был получен во время системного вызова sigpause.

СМ. ТАКЖЕ


, , , , setjmp(2)

ДИАГНОСТИКА


При успешном завершении sigset возвращает предыдущее значение реакции системы на заданный сигнал sig. В противном случае возвращается значение SIG_ERR, а errno указывает на ошибку.SIG_ERR определяется в файле <signal.h>

Что касается других функций,то при их успешном выполнении возвращается значение 0. В противном случае возвращается значение -1, а errno указывает на ошибку.

Примечания





Содержание  Назад  Вперед