Linux что такое sig

Linux что такое sig

Известно три варианта реакции на сигналы:

  • вызов собственной функции обработки;
  • игнорирование сигнала (не работает для SIGKILL );
  • использование предварительно установленной функции обработки по умолчанию.

void(*signal(int signr, void(*sighandler)(int)))(int); Такой прототип очень сложен для понимания. Следует упростить его, определив тип для функции обработки:

typedef void signalfunction(int); После этого прототип функции примет вид: signalfunction *signal(int signr,

signalfunction *sighandler); signr устанавливает номер сигнала, для которого устанавливается обработчик. В заголовочном файле определены следующие сигналы (табл. 1).

Номер Значение Реакция программы по умолчанию
SIGABRT Ненормальное завершение (abort()) Завершение
SIGALRM Окончание кванта времени Завершение
SIGBUS Аппаратная ошибка Завершение
SIGCHLD Изменение состояния потомка Игнорирование
SIGCONT Продолжение прерванной программы Продолжение / игнорирование
SIGEMT Аппаратная ошибка Завершение
SIGFPE Ошибка вычислений с плавающей запятой Завершение
SIGILL Неразрешенная аппаратная команда Завершение
SIGINT Прерывание с терминала Завершение
SIGIO Асинхронный ввод/вывод Игнорирование
SIGKILL Завершение программы Завершение
SIGPIPE Запись в канал без чтения Завершение
SIGPWR Сбой питания Игнорирование
SIGQUIT Прерывание с клавиатуры Завершение
SIGSEGV Ошибка адресации Завершение
SIGSTOP Остановка процесса Остановка
SIGTTIN Попытка чтения из фонового процесса Остановка
SIGTTOU Попытка записи в фоновый процесс Остановка
SIGUSR1 Пользовательский сигнал Завершение
SIGUSR2 Пользовательский сигнал Завершение
SIGXCPU Превышение лимита времени CPU Завершение
SIGXFSZ Превышение пространства памяти (4GB) Завершение
SIGURG Срочное событие Игнорирование
SIGWINCH Изменение размера окна Игнорирование

Переменная sighandler определяет функцию обработки сигнала. В заголовочном файле определены две константы SIG_DFL и SIG_IGN . SIG_DFL означает выполнение действий по умолчанию — в большинстве случаев — окончание процесса. Например, определение signal(SIGINT, SIG_DFL); приведет к тому, что при нажатии на комбинацию клавиш CTRL+C во время выполнения сработает реакция по умолчанию на сигнал SIGINT и программа завершится. С другой стороны, можно определить
signal(SIGINT, SIG_IGN);

Если теперь нажать на комбинацию клавиш CTRL+C , ничего не произойдет, так как сигнал SIGINT игнорируется. Третьим способом является перехват сигнала SIGINT и передача управления на адрес собственной функции, которая должна выполнять действия, если была нажата комбинация клавиш CTRL+C , например
signal(SIGINT, function);

Пример использования обработчика сигнала приведен ниже: #include

printf(«\nХотите завершить программу (y/n) : «);

Источник

Читайте также:  Astra linux логи авторизации
Оцените статью
Adblock
detector