Обработка сигналов в C++

Опубликовано: 15 Сентября, 2022

Сигналы — это прерывания, которые заставляют ОС остановить текущую задачу и перейти к задаче, для которой было отправлено прерывание. Эти прерывания могут приостановить обслуживание в любой программе ОС. Точно так же C++ также предлагает различные сигналы, которые он может перехватывать и обрабатывать в программе. Вот список различных сигналов и их операций, с которыми C++ предоставляет пользователю возможность работать.

Сигналы

Операции

ПОДПИСЬ

производит квитанцию для активного сигнала

SIGTERM

Отправляет запрос на завершение программы

СИГБУС

Ошибка шины, указывающая на доступ к неверному адресу

СИГИЛЛ

Обнаруживает недопустимую команду

СИГАЛРМ

Это используется функцией alarm() и указывает на истечение таймера.

СИГАБРТ

Прекращение программы, аварийное

SIGSTOP

Сигнал нельзя заблокировать, обработать и проигнорировать, и он может остановить процесс.

SIGSEGV

Неверный доступ к хранилищу

SIGFPE

Операции переполнения или математически неверные операции, такие как деление на ноль

SIGUSR1

СИГСУР2

Пользовательские сигналы

Эта функция signal() предоставляется библиотекой сигналов и используется для перехвата неожиданных прерываний или событий.

Синтаксис:

signal(registered signal, signal handler)

Первый аргумент — целое число, представляющее номер сигнала, а второй — указатель на функцию обработки сигнала. Мы должны помнить, что сигнал, который мы хотели бы поймать, должен быть зарегистрирован с помощью функции сигнала и должен быть связан с функцией обработки сигнала. Функция обработки сигнала должна быть типа void.

Пример:

Вывод: Находясь в бесконечном цикле, этот код будет отображать следующий вывод, пока не столкнется с прерыванием:

Hello GeeksforGeeks...
Hello GeeksforGeeks...
Hello GeeksforGeeks...
Hello GeeksforGeeks...

Теперь, если мы нажмем Ctrl+C , чтобы отправить прерывание, программа выйдет, напечатав:

Hello GeeksforGeeks...
Hello GeeksforGeeks...
Hello GeeksforGeeks...
Hello GeeksforGeeks...
The interrupt signal is (22).

функция повышения()

Функция повышения() используется для генерации сигналов.

Синтаксис:

raise( signal )

Он принимает в качестве аргумента любую из функций, упомянутых в списке.

Пример:

Эта статья предоставлена Chinmoy Lenka. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью write.geeksforgeeks.org или отправить ее по адресу review-team@geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.