Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Топ:
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
2021-01-29 | 125 |
5.00
из
|
Заказать работу |
|
|
Маска сигналов процесса является списком сигналов, которые процесс в настоящее время заблокировал. Сила POSIX API в том, что маской сигналов процесса можно манипулировать атомарно, как единым целым.
Маска сигналов процесса программно представляется с помощью набора сигналов. Это тип. Концептуально он представляет собой просто битовую маску, причем значения 0 и 1 представляют отсутствие или наличие определенного сигнала в маске.
Однако, поскольку в системе может быть больше сигналов, чем может содержаться в одной или и поскольку интенсивное использование побитовых операций тяжело для восприятия, для управления наборами сигналов существует несколько функций API.
Эти функции следующие:
Освобождает набор сигналов. По возвращении не содержит сигналов. Возвращает 0 в случае успеха и ‑1 при ошибке.
Полностью заполняет набор сигналов. По возвращении содержит все сигналы, определенные системой. Возвращает 0 в случае успеха и ‑1 при ошибке.
Добавляет к маске сигналов процесса в. Возвращает 0 в случае успеха и ‑1 при ошибке.
Удаляет из маски сигналов процесса в. Возвращает 0 в случае успеха и ‑1 при ошибке.
Возвращает true/false, если присутствует или не присутствует в.
Перед выполнением с переменной каких‑то действий всегда следует вызывать одну из функций или. Существуют оба интерфейса, поскольку иногда бывает нужно начать с пустого набора и работать потом лишь с одним или двумя сигналами, а в другое время бывает нужно работать со всеми сигналами, возможно, убирая один или два сигнала.
Управление маской сигналов: и др.
Маска сигналов процесса вначале пуста ‑ заблокированных сигналов нет. (Это упрощение; см. раздел 10.9 «Сигналы, передающиеся через и.) Три функции позволяют работать непосредственно с маской сигналов процесса:
|
Функции следующие:
Если не равен, получается маска сигналов текущего процесса и помещается в. Затем маска сигналов процесса обновляется в соответствии с содержимым и значением, который должен иметь одно из следующих значений:
Объединить сигналы в с маской сигналов текущего процесса. Новая маска является объединением текущей маски и.
Удалить сигналы в из маски сигналов процесса. Это не представляет проблемы, если содержит сигнал, который не содержится в текущей маске сигналов процесса.
Заменить маску сигналов процесса содержимым.
Если равен, a – нет, значение неважно. Эта комбинация получает маску сигналов текущего процесса, не меняя ее. (Это явно выражено в стандарте POSIX, но не ясно из справочной страницы GNU/Linux.)
Эта функция позволяет увидеть, какие сигналы ожидают решения; т.е. заполнен этими сигналами, которые были посланы, но они еще не доставлены, поскольку заблокированы.
Эта функция временно заменяет маску сигналов процесса содержимым, а затем приостанавливает процесс, пока сигнал не будет получен. По определению, заставить функцию вернуться может только сигнал, не находящийся в (см. раздел 10.7 «Сигналы для межпроцессного взаимодействия).
Перехват сигналов:
Наконец мы готовы взглянуть на функцию. Эта функция сложна, и мы намеренно опускаем множество деталей, которые предназначены для специального использования. Стандарт POSIX и справочная страница sigaction (2) предоставляют все подробности, хотя вы должны тщательно прочесть и то, и другое, чтобы полностью все усвоить.
Аргументы следующие:
Интересующий сигнал, как в случае с другими функциями обработки сигналов.
Определение нового обработчика для сигнала.
Определение текущего обработчика. Если не, система до установки заполняет. может быть, в этом случае заполняется, но больше ничего не меняется.
|
Таким образом, и устанавливает новый обработчик, и получает старый за одно действие. выглядит следующим образом.
Поля следующие:
Набор дополнительных сигналов для блокирования при запуске функции обработчика. Таким образом, когда вызывается обработчик, общий набор заблокированных сигналов является объединением сигналов в маске процесса, сигналов в и, если сброшен,.
Флаги, контролирующие обработку сигнала ядром. См. обсуждение далее.
Указатель на «традиционную» функцию обработчика. У нее такой же прототип (возвращаемый тип и список параметров), как у функции обработчика для, и.
Указатель на функцию обработчика «нового стиля». Функция принимает три аргумента, которые вскоре будут описаны.
Которая из функций и используется, зависит от флага в. Когда имеется, используется; в противном случае используется. Как POSIX, так и справочная страница GNU/Linux указывают, что эти два поля могут перекрываться в памяти (т. е. быть частью). Таким образом, никогда не следует использовать оба поля в одной и той же.
Поле составляется с помощью побитового ИЛИ значений одного или более флагов, перечисленных в табл. 10.3.
Таблица 10.3. Значения флагов для
Флаг | Значение |
Этот флаг имеет смысл лишь для. Когда он установлен, родитель не получает сигнал при остановке порожденною процесса сигналами,, или. Эти сигналы обсуждаются позже, в разделе 10.8.2 | |
Этот флаг имеет смысл лишь для. Его поведение сложно. Мы отложим объяснение на потом, см. раздел 10.8.3 | |
Обычно данный сигнал блокируется, когда вызывается обработчик сигнала. Когда установлен один из этих флагов, данный сигнал не блокируется при запуске обработчика является официальным именем POSIX данного флага (которое и следует использовать) | |
Альтернативное имя для [110] | |
Обработчик сигнала принимает три аргумента. Как упоминалось, при данном установленном флаге должно использоваться поле вместо. | |
Это продвинутая возможность. Обработчики сигналов могут вызываться с использованием предоставленной пользователем памяти в качестве «альтернативного стека сигнала». Эта память даётся ядру для подобного использования посредством (см. sigaltstack (2)). Эта особенность больше не описывается в данной книге | |
Этот флаг обеспечивает поведение V7: после вызова обработчика восстанавливается действие сигнала по умолчанию. Официальным именем POSIX флага (которое следует использовать) является | |
Альтернативное имя для | |
Этот флаг предоставляет семантику BSD: системные вызовы, которые могут завершиться с ошибкой и которые получают этот сигнал, запускаются повторно. |
Когда в установлен флаг, поле является указателем на функцию, объявленную следующим образом:
|
Структура _t предоставляет изобилие сведений о сигнале:
Поля, и доступны для всех сигналов. Другие поля могут быть членами объединения, поэтому должны использоваться лишь для тех сигналов, для которых они определены. В структуре могут быть также и другие поля.
Почти все поля предназначены для расширенного использования. Все подробности содержатся в стандарте POSIX и справочной странице sigaction (2). Однако, мы можем описать простое использование поля.
Для,,,,, и поле si_code может принимать любое из набора предопределенных значений, специфичных для каждого сигнала, указывая на причину появления сигнала. Откровенно говоря, детали несколько чрезмерны; повседневному коду на самом деле нет необходимости иметь с ними дела (хотя позже мы рассмотрим значения для). Для всех остальных сигналов член имеет одно из значений из табл. 10.4.
Таблица 10.4. Значения происхождения сигнала для
Значение | Только GLIBC | Смысл |
Асинхронный ввод/вывод завершен (расширенный). | ||
√ | Сигнал послан ядром. | |
Состояние очереди сообщений изменилось (расширенный.) | ||
Сигнал послан из (расширенный). | ||
√ | поставлен в очередь (расширенный). | |
Время таймера истекло | ||
Сигнал послан функцией. и также могут его вызвать, но это не обязательно. |
В особенности полезно значение; оно позволяет обработчику сигнала сообщить, был ли сигнал послан функциями или (описываются далее). Вы можете использовать эту информацию, чтобы избежать повторного вызова или.
Третий аргумент обработчика сигнала с тремя аргументами, t, является расширенной возможностью, которая больше не обсуждается в данной книге.
|
Наконец, чтобы увидеть в действии, исследуйте полный исходный код обработчика сигнала для:
Вот код в, который помещает обработчик на свое место:
Мы заметили, что строки 2216–2219 и 2221 могут быть замещены одним вызовом:;
Мы не знаем, почему код написан именно таким способом.
Интерес представляют также строки 2233–2234 и 2236–2237, которые показывают правильный способ проверки того, игнорируется ли сигнал, и для установки обработчика лишь в том случае, если сигнал не игнорируется.
ЗАМЕЧАНИЕ. Функции API и не должны использоваться вместе для одного и того же сигнала. Хотя POSIX идет на большие длинноты, чтобы сначала сделать возможным использование, получить, представляющую диспозицию, и восстановить ее, все равно это плохая мысль. Код будет гораздо проще читать, писать и понимать, если вы используете одну функцию или другую взаимоисключающим образам
|
|
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!