Linux программирование в примерах
Шрифт:
Поля следующие:
Набор дополнительных сигналов для блокирования при запуске функции обработчика. Таким образом, когда вызывается обработчик, общий набор заблокированных сигналов является объединением сигналов в маске процесса, сигналов в
Флаги, контролирующие обработку сигнала ядром. См. обсуждение далее.
Указатель на «традиционную» функцию
Указатель на функцию обработчика «нового стиля». Функция принимает три аргумента, которые вскоре будут описаны.
Которая из функций
Поле
Таблица 10.3. Значения флагов для
Флаг | Значение |
---|---|
SA_NOCLDSTOP | Этот флаг имеет смысл лишь для SIGCHLD . Когда он установлен, родитель не получает сигнал при остановке порожденною процесса сигналами SIGSTOP , SIGTSTP , SIGTTIN или SIGTTOU . Эти сигналы обсуждаются позже, в разделе 10.8.2 |
SA_NOCLDWAIТ | Этот флаг имеет смысл лишь для SIGCHLD . Его поведение сложно. Мы отложим объяснение на потом, см. раздел 10.8.3 |
SA_NODEFER | Обычно данный сигнал блокируется, когда вызывается обработчик сигнала. Когда установлен один из этих флагов, данный сигнал не блокируется при запуске обработчика SA_NODEFER является официальным именем POSIX данного флага (которое и следует использовать) |
SA_NOMASK | Альтернативное имя для SA_NODEFER [110] |
SA_SIGINFO | Обработчик сигнала принимает три аргумента. Как упоминалось, при данном установленном флаге должно использоваться поле sa_sigaction вместо sa_handler . |
SA_ONSTACK | Это продвинутая возможность. Обработчики сигналов могут вызываться с использованием предоставленной пользователем памяти в качестве «альтернативного стека сигнала». Эта память даётся ядру для подобного использования посредством sigaltstack (см. sigaltstack(2)). Эта особенность больше не описывается в данной книге |
SA_RESETHAND | Этот флаг обеспечивает поведение V7: после вызова обработчика восстанавливается действие сигнала по умолчанию. Официальным именем POSIX флага (которое следует использовать) является SA_RESETHAND |
SA_ONESHOT | Альтернативное имя для SA_RESETHAND. |
SA_RESTART | Этот флаг предоставляет семантику BSD: системные вызовы, которые могут завершиться с ошибкой EINTR и которые получают этот сигнал, запускаются повторно. |
110
Насколько мы смогли определить, имена
Когда в
Структура
Поля
Почти все поля предназначены для расширенного использования. Все подробности содержатся в стандарте POSIX и справочной странице sigaction(2). Однако, мы можем описать простое использование поля
Для
Таблица 10.4. Значения происхождения сигнала для
Значение | Только GLIBC | Смысл |
---|---|---|
SI_ASYNCIO | Асинхронный ввод/вывод завершен (расширенный). | |
SI_KERNEL | Сигнал послан ядром. | |
SI_MESGQ | Состояние очереди сообщений изменилось (расширенный.) | |
SI_QUEUE | Сигнал послан из sigqueue (расширенный). | |
SI_SIGIO | SIGIO поставлен в очередь (расширенный). | |
SI_TIMER | Время таймера истекло | |
SI_USER | Сигнал послан функцией kill . raise и abort также могут его вызвать, но это не обязательно. |
В особенности полезно значение
Третий аргумент обработчика сигнала с тремя аргументами,
Наконец, чтобы увидеть