Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
10.2. Действия сигналов
Каждый сигнал (вскоре мы представим полный список) имеет связанное с ним действие по умолчанию. POSIX обозначает это как диспозицию (disposition) сигнала. Это то действие, которое ядро осуществляет для процесса, когда поступает определенный сигнал. Действие по умолчанию варьирует:
Завершение
Процесс завершается.
Игнорирование
Сигнал игнорируется. Программа никогда не узнает, что что-то случилось.
Снимок образа процесса
Процесс завершается, и ядро создает файл core (в текущем каталоге процесса), содержащий образ работавшей на момент поступления сигнала программы. Снимок процесса может впоследствии использоваться с отладчиком для исследования состояния программы (см. главу 15 «Отладка»).
По умолчанию системы GNU/Linux создают файлы с именем
core.<i>pid</i><i>pid</i>corecorecoreОстановка
Процесс останавливается. Впоследствии он может быть возобновлен. (Если вы использовали управление заданиями оболочки с помощью CTRL-Z,
fgbg10.3. Стандартные сигналы С:
signal()raise()Стандарт ISO С определяет первоначальный API управления сигналами V7 и новый API для посылки сигналов. Вы должны использовать их для программ, которым придется работать на не-POSIX системах, или в случаях, когда предоставляемые ISO С API возможности являются достаточными.
10.3.1. Функция
signal()Действие сигнала изменяется с помощью функции
signal()Функция, которую вы предоставляете для распоряжения сигналом, называется обработчиком сигнала (или просто обработчиком), а установка ее в соответствующем месте осуществляет перехват (catch) сигнала.
Получив эти сведения, давайте перейдем к API. В заголовочном файле
<signal.h>#include <signal.h> /* ISO С */void (*signal(int signum, void (*func)(int)))(int);Это объявление для функции signal() почти невозможно прочесть. Поэтому справочная страница GNU/Linux signal(2) определяет ее таким способом:
typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);Теперь это более вразумительно. Тип
sighandler_tvoidФункция
signal()SIG_DEF,SIG_IGNsignal()signumSIG_ERRsignumТаблица 10.1. Сигналы GNU/Linux
| Имя | Значение | По умолчанию | Источник | Смысл |
|---|---|---|---|---|
SIGHUP | 1 | Term | POSIX | Отсоединение |
SIGINT | 2 | Term | ISO C | Прерывание |
SIGQUIT | 3 | Core | POSIX | Выход |
SIGILL | 4 | Core | ISO C | Недействительная инструкция |
SIGTRAP | 5 | Core | POSIX | Трассировочная ловушка |
SIGABRT | 6 | Core | ISO C | Прекращение |
SIGIOT | 6 | Core | BSD | Ловушка IOT |
SIGBUS | 7 | Core | BSD | Ошибка шины |
SIGFPE | 8 | Core | ISO C | Исключение с плавающей точкой |
SIGKILL | 9 | Term | POSIX | Завершение, неблокируемый |
SIGUSR1 | 10 | Term | POSIX | Сигнал 1 пользователя |
SIGSEGV | 11 | Core | ISO C | Нарушение сегмента |
SIGUSR2 | 12 | Term | POSIX | Сигнал 2 пользователя |
SIGPIPE | 13 | Term | POSIX | Нарушенный канал |
SIGALRM | 14 | Term | POSIX | Аварийные часы |
SIGTERM | 15 | Term | ISO C | Завершение |
SIGSTKFLT | 16 | Term | Linux | Ошибка стека в процессоре (не используется) |
SIGCHLD | 17 | Ignr | POSIX | Изменение статуса порожденного процесса |
SIGCLD | 17 | Ignr | System V | То же, что и SIGCHLD (для совместимости) |
SIGCONT | 18 | POSIX | Продолжить при остановке | |
SIGSTOP | 19 | Stop | POSIX | Стоп, неблокируемый |
SIGTSTP | 20 | Stop | POSIX | Стоп от клавиатуры |
SIGTTIN | 21 | Slop | POSIX | Фоновое чтение от tty |
SIGTTOU | 22 | Stop | POSIX | Фоновая запись в tty |
SIGURG | 23 | Ignr | BSD | Срочный сигнал сокета |
SIGXCPU | 24 | Core | BSD | Превышение предела процессора |
SIGXFSZ | 25 | Core | BSD | Превышение предела размера файла |
SIGVTALRM | 26 | Term | BSD | Виртуальные аварийные часы |
SIGPROF | 27 | Term | BSD | Профилирующие аварийные часы |
SIGWINCH | 28 | Ignr | BSD | Изменение размера окна |
SIGIO | 29 | Term | BSD | Возможен ввод/вывод |
SIGPOLL | 29 | Term | System V | Опрашиваемое событие, то же, что и SIGIO (для совместимости) |
SIGPWR | 30 | Term | System V | Повторный запуск из-за сбоя питания |
SIGSYS | 31 | Core | POSIX | Неверный системный вызов |