signal (2) обработка сигнала |
Синтаксис
#include <signal.h> void (*signal(int signum, void (*handler)(int)))(int); |
Описание
Системный вызов signal устанавливает новый обработчик сигнала заданного типа. |
Параметры
signum | Тип сигнала. Некоторые типы сигналов в Linux:
| ||||||||||||||||||||||
handler | Обработчик сигнала или одно из следующих имен:
|
Обработчик сигнала должен быть функцией, объявляемой по такому прототипу:
void имя_обработчика(int signum);
Аргументом обработчика является тип сигнала. Один и тот же обработчик может быть назначен для сигналов разного типа.
Возвращаемое значение
При нормальном завершении вызов возвращает адрес старого обработчика данного сигнала, при ненормальном - ошибку SIG_ERR |
Типы сигналов
Типы сигналов и способы их возникновения в системе жестко регламентированы. Типы сигналов принято задавать числовыми номерами, в диапазоне от 1 до 31 включительно, или символьными именами, определенными в системных включаемых файлах.
Некоторые наиболее часто употребляемые сигналы (полный список можно получитьвыполнив команду kill -l):
Название | Номер | Действие по умолчанию | Описание | Тип |
---|---|---|---|---|
SIGABRT | 6 | завершение с дампом памяти (образ памяти процесса сохраняется в файле core в текущем рабочем каталоге процесса) | Сигнал посылаемый функцией abort() | управление |
SIGALRM | 14 | завершение | Сигнал истечения времени заданного alarm() | уведомление |
SIGBUS | 7 | завершение с дампом памяти | Неправильное обращение в физическую память (аппаратная ошибка) | исключение |
SIGCHLD | 17 | игнорируется | Дочерний процесс завершен или остановлен (изменение состояния дочернего процесса) | уведомление |
SIGCONT | 18 | продолжить выполнение | Продолжить выполнение ранее остановленного процесса | управление |
SIGFPE | 8 | завершение с дампом памяти | Ошибочная арифметическая операция | исключение |
SIGHUP | 1 | завершение | Закрытие терминала | уведомление |
SIGILL | 4 | завершение с дампом памяти | Недопустимая инструкция процессора | исключение |
SIGINT | 2 | завершение | Сигнал прерывания (Ctrl-C) с терминала | управление |
SIGKILL | 9 | завершение | Безусловное завершение (сигнал нельзя перехватить) | управление |
SIGPIPE | 13 | завершение | Запись в разорванное соедиение (пайп, сокет)(в канал, который никто не читает) | уведомление |
SIGQUIT | 3 | завершение с дампом памяти | Сигнал «Quit» с терминала (Ctrl-D) | управление |
SIGSEGV | 11 | завершение с дампом памяти | Нарушение при обращении в память | исключение |
SIGSTOP | 19 | остановка процесса | Остановка выполнения процесса | управление |
SIGTERM | 15 | завершение | Сигнал завершения (сигнал по умолчанию для утилиты kill) | управление |
SIGTSTP | 20 | остановка процесса | Сигнал остановки с терминала (Ctrl-Z). | управление |
SIGTTIN | 21 | остановка процесса | Попытка чтения с терминала фоновым процессом | управление |
SIGTTOU | 22 | остановка процесса | Попытка записи на терминал фоновым процессом | управление |
SIGUSR1 | 10 | завершение | Пользовательский сигнал № 1 | пользовательский | SIGUSR2 | 12 | завершение | Пользовательский сигнал № 2 | пользовательский |
SIGSYS | 31 | завершение с дампом памяти | Неправильный системный вызов | исключение |
SIGURG | 23 | игнорируется | На сокете получены срочные данные | уведомление |
SIGXCPU | 24 | завершение с дампом памяти | Процесс превысил лимит процессорного времени | исключение |
SIGXFSZ | 25 | завершение с дампом памяти | Процесс превысил допустимый размер файла | исключение |
См.также
kill, raise. |