signal() изменяет действие для signum и возвращает предыдущее действие. (Это дает вам возможность восстановить при желании предыдущее действие.) Возвращаемое значение может равняться также SIG_ERR, что указывает на произошедшую ошибку. (Некоторые сигналы невозможно перехватить или игнорировать; предоставление для них обработчика сигнала или неверный signum создают эту ошибку.) В табл. 10.1 перечислены сигналы, доступные под GNU/Linux, их числовые значения, действия по умолчанию для каждого, формальный стандарт или современная операционная система, которые их определяют, и смысл каждого.

Таблица 10.1. Сигналы GNU/Linux

ИмяЗначениеПо умолчаниюИсточникСмысл
SIGHUP1TermPOSIXОтсоединение
SIGINT2TermISO CПрерывание
SIGQUIT3CorePOSIXВыход
SIGILL4CoreISO CНедействительная инструкция
SIGTRAP5CorePOSIXТрассировочная ловушка
SIGABRT6CoreISO CПрекращение
SIGIOT6CoreBSDЛовушка IOT
SIGBUS7CoreBSDОшибка шины
SIGFPE8CoreISO CИсключение с плавающей точкой
SIGKILL9TermPOSIXЗавершение, неблокируемый
SIGUSR110TermPOSIXСигнал 1 пользователя
SIGSEGV11CoreISO CНарушение сегмента
SIGUSR212TermPOSIXСигнал 2 пользователя
SIGPIPE13TermPOSIXНарушенный канал
SIGALRM14TermPOSIXАварийные часы
SIGTERM15TermISO CЗавершение
SIGSTKFLT16TermLinuxОшибка стека в процессоре (не используется)
SIGCHLD17IgnrPOSIXИзменение статуса порожденного процесса
SIGCLD17IgnrSystem VТо же, что и SIGCHLD (для совместимости)
SIGCONT18POSIXПродолжить при остановке
SIGSTOP19StopPOSIXСтоп, неблокируемый
SIGTSTP20StopPOSIXСтоп от клавиатуры
SIGTTIN21SlopPOSIXФоновое чтение от tty
SIGTTOU22StopPOSIXФоновая запись в tty
SIGURG23IgnrBSDСрочный сигнал сокета
SIGXCPU24CoreBSDПревышение предела процессора
SIGXFSZ25CoreBSDПревышение предела размера файла
SIGVTALRM26TermBSDВиртуальные аварийные часы
SIGPROF27TermBSDПрофилирующие аварийные часы
SIGWINCH28IgnrBSDИзменение размера окна
SIGIO29TermBSDВозможен ввод/вывод
SIGPOLL29TermSystem VОпрашиваемое событие, то же, что и SIGIO (для совместимости)
SIGPWR30TermSystem VПовторный запуск из-за сбоя питания
SIGSYS31CorePOSIXНеверный системный вызов

Обозначения: Core: Завершить процесс и создать снимок образа процесса Ignr: Игнорировать сигнал Stop: Остановить процесс. Term: Завершить процесс.

Более старые версии оболочки Борна (/bin/sh) непосредственно связывали с номерами сигналов ловушки (traps), которые являются обработчиками сигналов на уровне оболочки. Таким образом, всесторонне образованному Unix-программисту нужно было знать не только имена сигналов для использования в коде С, но также и соответствующие номера сигналов! POSIX требует, чтобы команда trap понимала символические имена сигналов (без префикса 'SIG'), поэтому этого больше не требуется. Однако (главным образом для лучшего разбирательства), мы предоставили эти номера в интересах полноты из-за того, что однажды вам может понадобиться иметь дело со сценарием оболочки, созданным до POSIX, или с древним кодом на С, которые непосредственно используют номера сигналов.

ЗАМЕЧАНИЕ. Для некоторых более новых сигналов, от 16 и выше, соответствующие номера сигнала и их имена на различных платформах не обязательно совпадают! Проверьте заголовочные файлы и справочные страницы на своей системе. Табл. 10.1 верна для GNU/Linux

Перейти на страницу:

Похожие книги