
- •Введение
- •Глава 1. Фундаментальные концепции unix Систем
- •Программы, процессы и потоки
- •Сигналы
- •Идентификаторы процессов, группы процессов и сеансы
- •Система прав
- •Другие атрибуты процесса
- •Межпроцессное взаимодействие
- •Использование системных вызовов
- •Краткие описания функций и обработка ошибок
- •Контрольные вопросы
- •Литература
- •Глава 2. Базовые операции ввода-вывода
- •Файловые операции ввода - вывода
- •Стандартные дескрипторы
- •Системные вызовы open и creat
- •Системный вызов umask
- •Системный вызов unlink
- •Текущая позиция в файле
- •Системный вызов write
- •2.8. Системный вызов read
- •2.9. Системный вызов close
- •2.10. Системный вызов lseek
- •2.11. Системные вызовы pread и pwrite
- •2.12. Системные вызовы truncate и ftruncate
- •Контрольные вопросы
- •Литература
- •Глава 3. Дополнительные операции файлового ввода_вывода
- •Низкоуровневый доступ к файловой системе
- •Жесткие и символические ссылки
- •Системный вызов getcwd
- •Отображение метаданных файла
- •Системные вызовы getpwuid, getgrgid и getlogin
- •Каталоги
- •Системные вызовы chdir и fchdir
- •Системные вызовы mkdir и rmdir
- •Контрольные вопросы
- •Литература
- •Глава 4. Процессы и потоки
- •4.1. Среда окружения
- •Системный вызов exec
- •Системный вызов fork
- •Завершение процесса и системные вызовы exit
- •Системные вызовы wait, waitpid и waitid
- •Получение и изменение идентификаторов пользователя и группы
- •Получение и изменение приоритета
- •Контрольные вопросы
- •Литература
- •Глава 5. Механизмы межпроцессного взаимодействия
- •5.1. Каналы
- •5.2. Системные вызовы dup и dup2
- •5.3. Двунаправленное взаимодействие с использованием однонаправленных каналов
- •Контрольные вопросы
- •Литература
- •Глава 6.Механизмы взаимодействия процессов
- •Именованные каналы (fifo)
- •Системные вызовы для работы с очередями сообщений posix
- •Семафоры
- •Системные вызовы для работы с общей памятью posix
- •Контрольные вопросы
- •Литература
- •Глава 7.Сетевое взаимодействие и сокеты
- •Основные системные вызовы для работы с сокетами, образующими логические соединения
- •Обслуживание нескольких клиентов
- •Адресация сокетов
- •In_port_t sin_port; /* номер порта (uint16_t) */
- •In_addr_t s_addr; /* адрес iPv4 (uint32_t) */
- •Домен адресов af_inet6
- •In_port_t sin6_port; /* номер порта (uint16_t) */
- •Доменная система именования
- •Параметры сокетов
- •Контрольные вопросы
- •Литература
- •Глава 8.Сигналы и таймеры
- •Введение в сигналы
- •Жизненный цикл сигналов
- •Типы сигналов
- •Системный вызов sigaction
- •Контрольные вопросы
- •Литература
- •Заключение
- •Список литературы
- •Глава 2. Базовые операции ввода-вывода 14
- •Глава 3. Дополнительные операции файлового ввода_вывода 25
- •Глава 6. Механизмы взаимодействия процессов 58
Жизненный цикл сигналов
Сигнал генерируется в тот момент, когда происходит событие, ассоциированное с данным сигналом. Жизнь сигнала заканчивается в момент доставки его приложению, то есть тогда, когда будет запущено действие, связанное с сигналом. Существует три разновидности действий или реакций на сигнал:
Действие по умолчанию (SIG_DFL), которое может завершать, приостанавливать или возобновлять работу процесса, а также игнорировать сигнал.
Игнорирование сигнала (SIG_IGN).
Перехват сигнала и вызов функции-обработчика.
В большинстве случаев сигналы генерируются естественным путем - пользователем или системой. Например, операция деления на ноль порождает естественный сигнал SIGFPE, завершение дочернего процесса порождает естественный сигнал SIGCHLD. Но любой сигнал может быть сгенерирован искусственно, при помощи одного из пяти системных вызовов: kill, killpg, pthread_kill, raise и sigqueue. Между моментом рождения и моментом доставки сигнал находится на стадии ожидания. Поток может заблокировать сигнал в состоянии ожидания. Набор блокируемых сигналов называется маской сигналов. Для создания масок и управления ими существует целый ряд системных вызовов. Сигнал может быть послан как конкретному потоку, так и всему процессу. Реакция на сигнал относится ко всему процессу, даже если этот процесс исполняется в нескольких потоках.
Типы сигналов
Определено 28 различных сигналов, но большинство реализаций дополняют этот список своими сигналами:
Обнаруженные ошибки:
SIGBUS - попытка доступа к неопределенной части памяти;
SIGFPE - ошибка арифметической операции;
SIGILL - некорректная команда;
SIGPIPE - запись в канал, из которого никто не читает;
SIGSEGV - недопустимое обращение к сегменту памяти;
SIGSYS - недопустимое обращение к системному вызову;
SIGXCPU - исчерпан лимит процессорного времени;
SIGXFSZ - превышено ограничение на размер файла.
Генерируемые пользователем или приложением:
SIGABRT - обращение к системному вызову abort;
SIGHUP - обнаружен обрыв связи с терминалом или завершение терминального процесса;
SIGINT - прерывание работы;
SIGKILL - ликвидировать, может иметь только искусственное происхождение;
SIGQUIT - завершить с клавиатуры;
SIGTERM - завершить, может иметь только искусственное происхождение;
SIGUSR1 - сигнал пользователя № 1, имеет только искусственное происхождение;
SIGUSR2 - сигнал пользователя № 2, имеет только искусственное происхождение;
Управление заданиями:
SIGCHLD - дочерний процесс завершил или приостановил работу;
SIGTTIN - попытка чтения из фонового процесса;
SIGTTOU - попытка записи из фонового процесса;
События таймера:
SIGALRM - истекло время таймера;
SIGVTALRM - истекло время виртуального таймера;
SIGPROV - истекло время профилирующего таймера;
Прочие события:
SIGPOLL – произошло ожидаемое событие;
SIGTRAP - ловушка трассировщика - точка останова;
SIGURG - доступны внеочередные данные в сокете.
Сигналы, обнаружения ошибок, имеющие естественную природу, являются результатом ошибок в программе. Сигналы SIGINT и SIGQUIT, обычно являются результатом нажатия определенной комбинации клавиш на клавиатуре. Сигнал SIGHUP, как правило, возникает при разрыве связи с терминальным устройством. Сигнал SIGABRT генерируется системным вызовом abort, а SIGTERM - командой kill - это основной способ принудительного завершения процессов, например, когда системный администратор дал команду на остановку системы. Сигналы SIGUSR1 и SIGUSR2 не генерируются системой и могут свободно использоваться для внутренних нужд приложения.
Сигнал может стать причиной прерывания работы системного вызова. Самое простое правило, которое следует соблюдать при работе с сигналами – никогда не возвращать управление из обработчика сигнала, если вы не управляете контекстом, в котором был сгенерирован сигнал.