Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shp.doc
Скачиваний:
12
Добавлен:
18.09.2019
Размер:
5.46 Mб
Скачать
  1. Обработка сигналов в unix Нормальное и аварийное завершение

Получение большинства сигналов приводит к нормальному завершению процесса. Действие сигнала при этом похоже на неожиданный вызов процессом функции _exit. Статус завершения, возвращаемый при этом родительскому процессу, сообщит о причине завершения дочернего процесса. В файле <sys/wait.h> определены макросы, которые позволяют родительскому процессу определить причину завершения дочернего процесса (получение сигнала и, собственно, значение сигнала).

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

Задание обработчика сигналов: вызов sigaction

После определения списка сигналов можно задать определенный метод обработки сигнала при помощи процедуры sigaction.

Первый параметр signo задает отдельный сигнал, для которого нужно определить действие. Чтобы это действие выполнялось, процедура sigaction должна быть вызвана до получения сигнала типа signo. Значением переменной signo может быть любое из ранее определенных имен сигналов, за исключений SIGSTOP и SIGKILL, которые предназначены только для остановки или завершения процесса и не могут обрабатываться по-другому.

Посылка сигналов другим процессам: вызов kill

Процесс вызывает процедуру sigaction для установки реакции на поступление сигнала. Первый параметр pid определяет процесс или процессы, которым посылается сигнал sig. Обычно pid является положительным числом, и в этом случае он рассматривается как идентификатор процесса

Посылка сигналов самому процессу: вызовы raise и

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

Вызов alarm - это простой и полезный вызов, который устанавливает таймер процесса. При срабатывании таймера процессу посылается сигнал.

Системный вызов pause ОС UNIX также содержит дополняющий вызов alarm системный вызов pause, который определен следующим образом:

Вызов pause приостанавливает выполнение вызывающего процесса до получения любого сигнала, например, сигнала SIGALRM.

  1. Примитивы межпроцессного взаимодействия: программные каналы.

Программный канал служит для установления односторонней связи, соединяющей один процесс с другим, и является еще одним видом обобщенного ввода/вывода системы UNIX. Процесс может посылать данные в канал при помощи системного вызова write, а другой процесс может принимать данные из канала при помощи системного вызова read.

Каналы создаются в программе при помощи системного вызова pipe. В случае удачного завершения вызов сообщает два дескриптора файла: один для записи в канал, а другой для чтения из него. Вызов pipe определяется следующим образом:

Запись и чтение каналов.

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

Использование системного вызова select для работы с несколькими каналами.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]