Сигналы unix. Сигналы в linux. Примеры. Некоторые типы сигналов

Для Windows 20.03.2019
Для Windows

И так. Так получилось, что достался DSL модем и телефонная линия для интернета. Возникла задача это всё дело настроить. Приступим.

Добавляем строки в /etc/rc.conf

ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="provider"

Слово provider — может быть произвольным. Это идентифицирует настройки именно того подключения, которое будет использоваться. На самом деле в конфигурационном файле (имеется ввиду /etc/ppp/ppp.conf ) может быть несколько описаний, и каждое может использоваться для своего подключения.

Далее, переходим в каталог /etc/ppp . Для этого вы должны обладать рутовыми правами (иначе не пустит). Чаще всего, что дефолтный конфиг уже присутствует. Но если это не так — читаем ниже. В любом случае, приводим файл ppp.conf к такому виду.

set device PPPoE:em0:provider
set speed sync
set mru 1492
set mtu 1492
set ctsrts off
set timeout 0
set redial 0 0
enable lqr
set lqrperiod 5

provider:
set authname ЛОГИН
set authkey ПАРОЛЬ
add default HISADDR

Поясним некоторые параметры.

em0 — имя внешнего интерфейса
set authname — задаём логин для доступа к интернету
set authkey — собственно пароль 🙂

Пару слов об MTU.

MTU Maximum Transmission Unit . Это максимальный размер блока данных, который может быть передан через интерфейс. Это понятие находится на пересечении L2 и L3 и его интерпретация может различаться для разных вендоров.

Например, типичный размер MTU для физического L3 -интерфейса 1500 . То есть, грубо говоря, IP -пакет размером 1500 байт будет обработан, а 1501 – отброшен или фрагментирован. Зачастую фрагментация пакетов запрещена, и потому большие пакеты отбрасываются.

Если вы используете туннелирование, размер пакета увеличивается засчёт дополнительных заголовков (GRE , IPSec и т.д.) Например:

— для GRE: 24 байта (GRE , Новый IP).
— для GRE over IPSec: 56 и более байтов (зависит от режима работы и типа шифрования)
— для PPPoE: 36 (PPP , PPPoE , Ethernet )

Если у вас на маршрутизаторе MTU=1514 , но у провайдера на физическом интерфейсе стоит MTU=1500 , и на нём пакет будет отброшен.

Для всевозможных туннелей это совершенно типичная проблема.

ОЧЕНЬ СУЩЕСТВЕННЫ ОТСТУПЫ В ЭТОМ ФАЙЛЕ!!! Слова provider и default начинаются строго с начала строки, все остальные параметры начинаются строго с отступа. Собственно это и всё. Запустить соединение можно так

#ppp -ddial provider

Для управлением настроек соединения в режиме реального времени служит утилита pppctl . С её помощью вы можете налету менять настройки соединения.

Дополнения:

При этом в логах будет отображаться меньше записей о подключении

2) Обрыв в произвольное время

Виной может быть строка набора номера для вашего модема

set dial "...... ATS10=10 OK ......"

Попробовать выставить меньше/больше таймаут

3) Прочие обрывы

Как вариант отключить компрессию

disable pred1 deflate deflate24 protocomp acfcomp shortseq vj
deny pred1 deflate deflate24 protocomp acfcomp shortseq vj

В мире существует множество разновидностей сетевой связи, функционирующих на базе протоколов различного предназначения и разного уровня эффективности. Рассмотрим основные вопросы, связанные с протоколом PPPoE: что это, как он работает и для чего был создан. Чтобы понять преимущества данной технологии, необходимо изучить несколько важных моментов. Начнем знакомство с небольшого введения в понятие РРРоЕ.

Сущность данного решения

Отвечая на вопрос: «PPPoE - что это?», следует пояснить, что речь идет об особом протоколе Название представляет собой аббревиатуру, которая расшифровывается как Point-to-Point Protocol over Ethernet, то есть через сеть Ethernet по принципу «от точки к точке». Соединение работает по аналогии с dial up.

Разница заключается в функционировании: сеть Ethernet связывает PPPoE вместо выделенной телефонной линии. Стоит сказать о сильных сторонах технологии. Подчеркнем, что PPPoE-подключение обладает преимуществом, которое заключается в расширенном спектре дополнительных возможностей: вы можете сжимать данные, проводить аутентификацию, шифровать информацию.

Однако требования MTU здесь ниже (1492 вместо 1500 байт), что иногда приводит к осложнениям при работе с Еще один ответ на вопрос: «PPPoE - что это?» - можно сформулировать так: это туннелирующий протокол. Другими словами, в данной технологии реализована возможность настройки IP или других протоколов через РРР или Ethernet-соединение. Поэтому PPPoE можно использовать для виртуальных звонков, «точечного» соединения и отправки пакетов IP, при этом получая все преимущества РРР.

PPPoE-соединение: что это и как работает

Осуществить PPPoE-подключение вовсе несложно. Первая задача - настройка антенны. Хотя это лучше доверить специалисту из техподдержки: вы как пользователь можете только подключить комплект к источнику питания. Точку доступа и радиоантенну соединяют толстым кабелем, к компьютеру подводят пару обвитых проводов. Провод обжимается и подключается с одной стороны к точке доступа, а с другой - к сетевому адаптеру.

Протокол PPPoE: что это и какие ошибки может выдавать

При работе с протоколом PPPoE могут возникнуть различные технические ошибки, по каждой из которых уже разработаны алгоритмы решений. О них стоит поговорить подробнее. Рассмотрим типичные ошибки PPPoE.

Популярная неполадка имеет номер 633 и означает отсутствие модема или его некорректную настройку. Для исправления положения можно осуществить перезагрузку компьютера, попытаться выйти в Интернет и заново создать подключение.

Ошибка номер 676 означает, что линия занята. Требуется снова войти по локальной сети и подключиться, а после перезагрузки удалить и заново установить сетевой драйвер.

Если не отвечает удаленный компьютер то можно проверить работоспособность антивируса и настройку сетевого экрана, если он имеется. Следует заново включить проверить работу кабеля и присутствие контакта в разъемах. Кроме того, проверьте работу карты и переустановите драйверы. Допускается отсутствие связи с сервером, но это уже системная проблема.

В любом случае нужно понять причину неполадки и выделить все возможные источники проблем. Вы можете обратиться к провайдеру, где вас проконсультирует служба поддержки. Другие распространенные (запрещен доступ), 711 (проблема служб), 720 (рассогласование протоколов подключения), 52 (при совпадающих именах не удается подключение к сети).

Многочисленны номера внутренних ошибок системы Windows (600, 601, 603, 606, 607, 610, 613, 614, 616 и другие) устраняются путем перезагрузки и удаления вирусов. Лучше отменять изменения в настройках, которые недавно были произведены. Если имеется некорректная настройка внутренней конфигурации сети, то возникает ошибка 611. Необходимо проверить функционирование локального подключения.

Ошибка 617 может быть симптомом внутренней неполадки ОС. С большинством нарушений в работе помогут разобраться технические специалисты службы поддержки. В ОС есть информация о неисправностях, проводится их диагностика, при этом варианты решения проблем уже заложены в систему.

Особенности

Технология PPPoE - беспроводная, передающая данные через радиоэфир. Выделенная линия слишком дорогая, а ее проведение не всегда возможно физически. Модемное подключение медленное и часто срывается. Радиосоединение более надежно.

Провайдеры не всегда готовы предоставить высокую скорость, которую сами же и урезают. Здесь важно отрегулировать антенну и направить ее на станцию, чтобы оптимизировать подачу сигнала. Есть еще такое понятие, как wan miniport PPPoE. Что это спросите вы? Если коротко, то это еще одна область, на которую может ссылаться сообщение об ошибке подключения. При ее возникновении свяжитесь с технической поддержкой.

Протоколы

Необходимо уточнить особенности протоколов, так как есть некоторые преимущества у каждого PPPoE передает фреймы протокола РРР напрямую через сеть Ethernet. Отличие от традиционного IP-соединения в том, что есть необходимость в создании учетной записи на шлюзе - это важно для установления контроля и его простого формата. Кроме того, облегчается процесс настройки такой функции, как биллинг.

Отличие PPPoE заключается в скорости, которая достигает 100 мегабит в секунду. Среда передачи - Ethernet. Здесь используется особая технология - стек РРР, которая не является инновационной в силу своей распространенности.

Минипорты

Для подключения и высокоскоростного соединения используется WAN Miniport с протоколом PPPoE. В момент запуска соединения на высокой скорости (особенно при использовании операционных систем Windows 7 и 8) возникает ошибка подключения. Эта ошибка имеет код 651 и связана со сбоем связи при использовании ADSL и с некорректной работой роутера.

Для устранения проблемы необходимо зайти на сервер (например, 192.168.1.1) и уточнить, есть ли соединение с сетью Интернет. Проблема может скрываться в технике абонента (неисправности в модеме, роутере, оптоволоконном терминале) или заключаться в неполадках у провайдеров.

Определение типа соединения

Данная операция может быть проведена пользователем компьютера, который обладает начальным уровнем подготовки. Итак, нажимаем кнопку «Пуск», чтобы вызвать главное меню ОС? и переходим к пункту «Настройки», чтобы выполнить определение типа интернет-соединения.

Отныне вы знаете больше о подключении PPPoE: что это и как работает данная технология.

Этот протокол разработан группой IETF (Internet Engineering Task Force) как часть стека TCP/IP для передачи кадров информации по последовательным глобальным каналам связи взамен устаревшего протокола SLIP (Serial Line IP). Протокол PPP стал фактическим стандартом для глобальных линий связи при соединении удаленных клиентов с серверами и для образования соединений между маршрутизаторами в корпоративной сети. При разработке протокола PPP за основу был взят формат кадров HDLC и дополнен собственными полями. Поля протокола PPP вложены в поле данных кадра HDLC. Позже были разработаны стандарты, использующие вложение кадра PPP в кадры frame relay и других протоколов глобальных сетей.

Основное отличие РРР от других протоколов канального уровня состоит в том, что он добивается согласованной работы различных устройств с помощью переговорной процедуры, во время которой передаются различные параметры, такие как качество линии, протокол аутентификации и инкапсулируемые протоколы сетевого уровня. Переговорная процедура происходит во время установления соединения.

Протокол РРР основан на четырех принципах: переговорное принятие параметров соединения, многопротокольная поддержка, расширяемость протокола, независимость от глобальных служб.

Переговорное принятие параметров соединения . В корпоративной сети конечные системы часто отличаются размерами буферов для временного хранения пакетов, ограничениями на размер пакета, списком поддерживаемых протоколов сетевого уровня. Физическая линия, связывающая конечные устройства, может варьироваться от низкоскоростной аналоговой линии до высокоскоростной цифровой линии с различными уровнями качества обслуживания.

Чтобы справиться со всеми возможными ситуациями, в протоколе РРР имеется набор стандартных установок, действующих по умолчанию и учитывающих все стандартные конфигурации. При установлении соединения два взаимодействующих устройства для нахождения взаимопонимания пытаются сначала использовать эти установки. Каждый конечный узел описывает свои возможности и требования. Затем на основании этой информации принимаются параметры соединения, устраивающие обе стороны, в которые входят форматы инкапсуляции данных, размеры пакетов, качество линии и процедура аутентификации.

Протокол, в соответствии с которым принимаются параметры соединения, называется протоколом управления связью (Link Control Protocol, LCP) . Протокол, который позволяет конечным узлам договориться о том, какие сетевые протоколы будут передаваться в установленном соединении, называетсяпротоколом управления сетевым уровнем (Network Control Protocol, NCP) . Внутри одного РРР - соединения могут передаваться потоки данных различных сетевых протоколов.

Одним из важных параметров РРР - соединения является режим аутентификации. Для целей аутентификации РРР предлагает по умолчанию протокол РАР (Password Authentication Protocol), передающий пароль по линии связи в открытом виде, или протокол CHAP (Challenge Handshake Authentication Protocol), не передающий пароль по линии связи и поэтому обеспечивающий большую безопасность сети. Пользователям также разрешается добавлять и новые алгоритмы аутентификации. Дисциплина выбора алгоритмов компрессии заголовка и данных аналогична.

Многопротокольная поддержка - способность протокола РРР поддерживать несколько протоколов сетевого уровня - обусловила распространение РРР как стандарта де-факто. В отличие от протокола SLIP, который может переносить только IP-пакеты, или LAP-B, который может переносить только пакеты Х.25, РРР работает со многими протоколами сетевого уровня, включая IP, Novell IPX, AppleTalk, DECnet, XNS, Banyan VINES и OSI, а также протоколами канального уровня локальной сети. Каждый протокол сетевого уровня конфигурируется отдельно с помощью соответствующего протокола NCP. Под конфигурированием понимается, во-первых, констатация того факта, что данный протокол будет использоваться в текущей сессии РРР, а во-вторых, переговорное утверждение некоторых параметров протокола. Больше всего параметров устанавливается для протокола IP - IP-адрес узла, IP-адрес серверов DNS, использование компрессии заголовка IP-пакета и т. д. Протоколы конфигурирования параметров соответствующего протокола верхнего уровня называются по имени этого протокола с добавлением аббревиатуры СР (Control Protocol), например протокол IPCP, IPXCP и т. п.

Расширяемость протокола . Под расширяемостью понимается как возможность включения новых протоколов в стек РРР, так и возможность использования собственных протоколов пользователей вместо рекомендуемых в РРР по умолчанию. Это позволяет наилучшим образом настроить РРР для каждой конкретной ситуации.

Независимость от глобальных служб . Начальная версия РРР работала только с кадрами HDLC. Теперь в стек РРР добавлены спецификации, позволяющие использовать РРР в любой технологии глобальных сетей, например ISDN, frame relay, Х.25, Sonet и HDLC.

Переговорная процедура протоколов LCP и NCP может и не завершиться соглашением о каком-нибудь параметре. Если, например, один узел предлагает в качестве MTU значение 1000 байт, а другой отвергает это предложение и в свою очередь предлагает значение 1500 байт, которое отвергается первым узлом, то по истечении тайм-аута переговорная процедура может закончиться безрезультатно.

Возникает вопрос - каким образом два устройства, ведущих переговоры по протоколу РРР, узнают о тех параметрах, которые они предлагают своему партнеру? Обычно у реализации протокола РРР есть некоторый набор параметров по умолчанию, которые и используются в переговорах. Тем не менее каждое устройство (и программа, реализующая протокол РРР в операционной системе компьютера) позволяет администратору изменить параметры по умолчанию, а также задать параметры, которые не входят в стандартный набор. Например, IP-адрес для удаленного узла отсутствует в параметрах по умолчанию, но администратор может задать его для сервера удаленного доступа, после чего сервер будет предлагать его удаленному узлу.

Хотя протокол РРР и работает с кадром HDLC, но в нем отсутствуют процедуры контроля кадров и управления потоком протокола HDLC. Поэтому в РРР используется только один тип кадра HDLC - ненумерованный информационный. В поле управления такого кадра всегда содержится величина 03. Для исправления очень редких ошибок, возникающих в канале, необходимы протоколы верхних уровней - TCP, SPX, NetBUEl, NCP и т. п.

Одной из возможностей протокола РРР является использование нескольких физических линий для образования одного логического канала, так называемый транкинг каналов. Эту возможность реализует дополнительный протокол, который носит название MLPPP (Multi Link РРР). Многие производители поддерживают такое свойство в своих маршрутизаторах и серверах удаленного доступа фирменным способом. Использование стандартного способа всегда лучше, так как он гарантирует совместимость оборудования разных производителей.

Общий логический канал может состоять из каналов разной физической природы. Например, один канал может быть образован в телефонной сети, а другой может являться виртуальным коммутируемым каналов сети frame relay.

Сигналы - это запросы на прерывание, реализуемые на уровне процессов. Определено свыше тридцати различных сигналов, и они находят самое разное применение.

  • Сигналы могут посылаться между процессами как средство коммуникации.
  • Сигналы могут посылаться драйвером терминала для уничтожения или приостановки процессов, когда пользователь нажимает специальные комбинации клавиш, такие как или .
  • Сигналы могут посылаться в самых разных целях пользователем или администратором с помощью команды kill.
  • Сигналы могут посылаться ядром, когда процесс выполняет нелегальную инструкцию, например деление на нуль.
  • Сигналы могут посылаться ядром для уведомления процесса о "представляющем интерес" событии, таком как прекращение дочернего процесса или доступность данных в канале ввода-вывода.
  • Дамп памяти - это файл, содержащий образ памяти процесса. Его можно использовать для отладки.
Функции, связанные с этими комбинациями клавиш, могут назначаться другим клавишам помощью команды stty, но на практике такое встречается очень редко. Мы подразумеваем, что с данными клавишами связаны их стандартные функции. Когда поступает сигнал, возможен один из двух вариантов развития событий. Если процесс назначил сигналу подпрограмму обработки, то после вызова ей предоставляется информация о контексте, в котором был сгенерирован сигнал. В противном случае ядро выполняет от имени процесса действия, заданные по умолчанию. Эти действия зависят от сигнала. Многие сигналы приводят к завершению процесса, а в некоторых случаях при этом еще и создается дамп памяти. Процедура вызова обработчика называется перехватом сигнала. Когда выполнение обработчика завершается, процесс возобновляется с той точки, где был получен сигнал. Для того чтобы определенные сигналы не поступали в программу, нужно задать их игнорирование или блокирование. Игнорируемый сигнал просто пропускается и не влияет на работу процесса. Блокируемый сигнал ставится в очередь на обработку, но ядро не требует от процесса никаких действий до явного разблокирования сигнала. Обработчик вызывается для разблокированного сигнала только один раз, даже если в течение периода блокировки поступило несколько аналогичных сигналов. Ниже перечислены сигналы, которые должны быть известны любому системному администратору. Традиционно имена сигналов записываются прописными буквами. Иногда к именам добавляется префикс SIG (например, SIGHUP). Имя Описание Реакция Перехваты- Блоки- Дамп умолчанию 1 HUP Отбой Завершение Да Да Нет 2 INT Прерывание Завершение Да Да Нет 3 QUIT Выход Завершение Да Да Да 9 KILL Уничтожение Завершение Нет Нет Нет 10 BUS Ошибка на шине Завершение Да Да Да 11 SEGV Ошибка сегментации Завершение Да Да Да 12 TERM Запрос на завершение завершение Да Да Нет 13 STOP Останов Останов Нет Нет Нет 14 TSTP Сигнал останова, посылаемый Останов Да Да Нет с клавиатуры 15 CONT Продолжение после останова Игнорируется Да Нет Нет 16 WINCH Изменение окна Игнорируется Да Да Нет 17 USR1 Определяется пользователем Завершение Да Да Нет 18 USR2 Определяется пользователем Завершение Да Да Нет Существуют и другие сигналы, не показанные в табл. 5.1; большинство из них сообщает о всяких загадочных ошибках, например "неверная инструкция". По умолчанию такие сигналы, как правило, приводят к завершению программы и созданию дампа памяти. Перехват и блокирование сигналов обычно разрешены, так как есть достаточно "умные" программы, устраняющие последствия ошибок. Сигналы BUS и segv также посылаются при возникновении ошибок. Мы включили их в таблицу, поскольку они чрезвычайно распространены: обычно программа аварийно завершается именно из-за них. Сами по себе эти сигналы не имеют диагностической ценности. Они лишь указывают на факт неправильного обращения к памяти6. Сигналы KILL и STOP нельзя ни перехватить, ни заблокировать, ни проигнорировать. Сигнал KILL приводит к уничтожению процесса, которому он посылается, а сигнал STOP приостанавливает выполнение процесса до получения сигнала CONT. Сигнал CONT можно перехватить и проигнорировать, но нельзя заблокировать. Сигнал tstp представляет собой более "гибкую" версию сигнала STOP. Проще всего описать его как запрос на останов. Он генерируется драйвером терминала при нажатии пользователем комбинации клавиш . Программы, перехватывающие этот сигнал, обычно выполняют операции очистки, а затем посылают сами себе сигнал STOP. С другой стороны, программы могут игнорировать сигнал TSTP, чтобы их нельзя было остановить командой с клавиатуры. Эмуляторы терминалов посылают сигнал WINCH, когда происходит изменение их конфигурационных параметров (например, числа строк на виртуальном терминале). Это позволяет программам, которые взаимодействуют с эмуляторами, таким как текстовые редакторы, автоматически переконфигурировать себя в ответ на изменения. Если размер окна не удается правильно изменить, убедитесь в том, что сигнал WINCH генерируется и корректно обрабатывается. Хотя назначение сигналов KILL, INT, TERM, HUP и QUIT может показаться одинаковым, в действительности они совершенно различны.
  • Сигнал KILL не блокируется и приводит к безусловному завершению процесса на уровне ядра. По сути, процесс не успевает даже принять этот сигнал.
  • Сигнал INT посылается драйвером терминала при нажатии пользователем комбинации клавиш и служит запросом на завершение текущей операции. Перехватив этот сигнал, простые программы должны завершить работу или позволить уничтожить себя стандартному обработчику сигнала. Программы, в которых есть интерактивный режим командной строки, должны прекратить текущую операцию, выполнить очистку и снова перейти в режим ожидания.
  • Сигнал TERM представляет собой запрос на завершение программы. Предполагается, что процесс, получивший этот сигнал, осуществляет очистку и завершается.
  • У сигнала HUP есть две распространенные интерпретации. Во-первых, многие демоны воспринимают его как команду сброса. Если демон способен повторно про честь свой конфигурационный файл и адаптироваться к изменениям без перезапуска, сигнал HUP позволяет менять его поведение.
  • Во-вторых, этот сигнал иногда генерируется драйвером терминала при попытке уничтожить связанные с терминалом процессы. В основном это поведение сохранилось со времен использования проводных соединений терминалов и модемов. Отсюда и название "отбой".
  • Интерпретаторы семейства csh (tcsh и другие) обычно делают фоновые процессы невосприимчивыми к сигналу HUP, чтобы они могли продолжать свою работу, даже когда пользователь выходит из системы. Пользователи интерпретаторов семейства sh (ksh, bash и так далее) могут эмулировать такое поведение с помощью команды nohup.
  • Сигнал QUIT напоминает сигнал TERM, за исключением того, что по умолчанию стандартный обработчик создает дамп памяти.
Сигналы USR1 и USR2 не имеют стандартного назначения. Ими можно пользоваться в различных целях. Например, веб-сервер Apache интерпретирует сигнал USR1 как запрос на перезапуск. Отправка сигналов: команда kill Команду kill чаще всего используют для уничтожения процессов. Эта команда может послать процессу любой сигнал, но по умолчанию это сигнал TERM. Команду kill могут выполнять как рядовые пользователи (для своих собственных процессов), так и суперпользователь (для любого процесса). Она имеет следующий синтаксис: kill [-сигнал] идентификатор, где сигнал - это номер или символическое имя посылаемого сигнала, а идентификатор - номер искомого процесса. Команда kill без номера сигнала не гарантирует, что процесс будет уничтожен, поскольку сигнал TERM можно перехватывать, блокировать и игнорировать. Команда kill -9 идентификатор "гарантированно" уничтожает процесс, так как сигнал с номером 9 (KILL) не перехватывается. Используйте команду kill -9 только в случае, если "вежливый" запрос на завершение программы не был выполнен. Мы написали слово "гарантированно" в кавычках, так как иногда процессы переходят в такое состояние, в котором их нельзя завершить даже таким способом (обычно это связано с блокировкой ввода-вывода, например, при остановке жесткого диска). Единственный выход в такой ситуации - перезагрузка. Команда killall выполняет различные функции в системах UNIX и Linux. В Linux команда killall уничтожает процессы, заданные именем. Например, следующая команда уничтожает все процессы веб-сервера Apache. ubuntu$ sudo killall httpd Стандартная UNIX-команда killall, предусмотренная в дистрибутивах Solaris, HP-UX и AIX, не принимает параметры и просто уничтожает все процессы текущего пользователя. Ее выполнение от имени суперпользователя приведет к уничтожению процесса init и выключению компьютера. Ух! Команды pgrep и pkill в системах Solaris, HP-UX и Linux (но не в АЕХ) осуществляют поиск процессов, заданных именами (или другими атрибутами). Команда pgrep выводит идентификаторы процессов, удовлетворяющих заданному в командной строке критерию, а команда pkill посылает найденным процессам сигнал. Например, следующая команда посылает сигнал TERM всем процессам, выполняемым от имени пользователя ben. $ sudo pkill -u ben

Сигнал или виртуальное прерывание является сообщением, которое система посылает процессу или один процесс посылает другому. Когда процесс получает сигнал, выполнение программы процесса прерывается, и управление передается на подпрограмму (функцию) - обработчик сигнала. После выполнения обработчика сигнала выполнение прерванной программы возобновляется с той точки, на которой она была прервана.

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

По умолчанию реакция на большинство сигналов - прекращение процесса, получившего сигнал, то есть, если процесс получает сигнал, обработка которого в нем не предусмотрена, то процесс-получатель сигнала завершается. Однако для большинства типов сигналов процесс может установить обработчик данного сигнала или установить игнорирование данного сигнала.

Если процесс находится в состоянии "добровольного" приостанова (вызванного, например, выполнением системного вызова sleep), то получение сигнала "пробуждает процесс от сна", независимо от того, в чем состояла обработка сигнала, системный вызов sleep заканчивается немедленно.

Обработчик сигнала в процессе имеет вид функции с прототипом:

Void имя_функции (int sigtype);

Параметром данной функции является тип сигнала (один и тот же обработчик может быть установлен для обработки сигналов разных типов).

Для установки своего обработчика сигнала, для его отмены или для установки игнорирования сигнала используется системный вызов signal

Функции-обработчики сигналов – это обычные функции Си, они имеют доступ ко всем глобально видимым переменным и функциям. Однако, поскольку мы не знаем, в какой момент выполнения программы будет вызвана функция-обработчик, мы должны проявлять особую осторожность при обращении к глобальным структурам данных из этой функции. Для функций, обрабатывающих потоки, существует и еще одно важное требование – реентерабильность. Поскольку обработчик сигнала может быть вызван в любой точке выполнения программы (а при не кототорых условиях во время обработки одного сигнала может быть вызван другой обработчик сигнала) в обработчиках додлжны использоваться функции, которые удовлетворяют требованию реентерабельности, то есть, могут быть вызваны в то время, когда они уже вызваны где-то в другой точке программы. Фактически, требование реентерабельности сводится к тому, чтобы функция не использовала никаких глобальных ресурсов, не позаботившись о синхронизации доступа к этим ресурсам. Некоторые функции ввода-вывода, в том числе, функция printf(), реентерабельными не являются. Это значит, что выводу одной функции printf() может помешать вывод другой функции. Ниже приводится список реентерабельных функций, которые безопасно вызвать из обработчиков сигналов.

Список реентерабельных функций

posix_trace_event()

timer_getoverrun()

Процесс может послать сигнал любому другому процессу, PID которого ему известен, при помощи системного вызова kill (несмотря на грозное название, этот системный вызов не обязательно убивает тот процесс, которому он адресован). В некоторых случаях процессу бывает нужно послать сигнал самому себе, это можно сделать при помощи системного вызова raise .

Некоторые типы сигналов

Типы сигналов идентифицируются числовыми номерами, но при программировании часто используются символьные имена сигналов, определенные в системных включаемых файлах. Ниже приведены некоторые наиболее часто употребляемые имена сигналов:

Этот сигнал приводит к завершению получившего его процесса. Это единственный сигнал, который не может игнорироваться и для которого нельзя назначить собственный обработчик

Этот сигнал - запрос на завершение процесса. Выдачу этого сигнала, например, включает в себя команда (не системный вызов!) kill . Подразумевается, что процесс, получивший этот сигнал, должен завершиться, однако процесс может установить игнорирование этого сигнала или назначить для него собственный обработчик.

Этот сигнал система посылает родительскому процессу при завершении любого его дочернего процесса. Реакция на этот сигнал, установленная по умолчанию, - игнорирование. Родительский процесс может не заботиться об обработке этого сигнала, если только он не хочет использовать его для синхронизации своего выполнения с дочерним процессом.

Этот сигнал используется для отсчета временных интервалов. Процесс может установить некоторый временной интервал при помощи системных вызовов alarm или setitimer , и по истечении заданного интервала система пошлет ему сигнал SIGALRM .

SIGUSR1 и SIGUSR2

За этими сигналами не зарезенвированы никакие системные назначения. Процессы могут посылать эти сигналы друг другу и интерпретировать их по своему усмотрению.

Более подробно про типы сигналов см. в описании функции



Рекомендуем почитать

Наверх