Обработка сигналов в C++
Сигналы — это прерывания, которые заставляют ОС остановить текущую задачу и перейти к задаче, для которой было отправлено прерывание. Эти прерывания могут приостановить обслуживание в любой программе ОС. Точно так же 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, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.