Программирование на C

Сигналы POSIX с программированием на C

Сигналы POSIX с программированием на C
Мы можем определить сигнал как действие, которое запускается для предупреждения операции или потока всякий раз, когда наступает время прибытия для определенной важной ситуации. Всякий раз, когда процедура или поток подтверждает сигнал, процедура или поток останавливает все, что делает, и предпринимает немедленные действия. При межпроцессной координации сигнал может быть эффективным. В этом руководстве вы изучите обработчики сигналов в Linux через язык C.

Стандартные или обычные сигналы:

Сигнал заголовочного файла.h 'имеет сигналы, указанные в нем как макроконстанту. Название сигнала начинается с «SIG» и предваряется кратким обзором сигналов. Следовательно, любой сигнал имеет отдельное числовое значение. В программном коде должно использоваться имя сигнала, а не несколько сигналов. Причина в том, что количество сигналов может варьироваться в зависимости от системы, но интерпретация имен стандартна. Ниже приведены некоторые обычные сигналы с определением их функциональности.

SIGHUP:

Этот сигнал прервет обработку. Сигнал SIGHUP отключается, чтобы указать на отключение пользовательского терминала, вероятно, из-за нарушения удаленной связи или зависания.

ЗНАЧЕНИЕ:

Это нарушит процесс. Сигнал SIGINT принимается всякий раз, когда пользователь вводит клавишу INTR (обычно Ctrl + C).

SIGQUIT:

Это остановит или выйдет из обработки. Сигнал SIGQUIT поступает всякий раз, когда пользователь вводит клавишу QUIT (обычно Ctrl + \).

СИГИЛЛ:

Он запускается, когда была сделана незаконная команда. Сигнал SIGILL создается всякий раз, когда делается попытка выполнить нежелательную или привилегированную команду. Всякий раз, когда стек переполняется и на машине возникают проблемы с запуском контроллера сигналов, также может быть создан SIGILL.

СИГТРАП:

Вызывается, когда выполняется некоторая инструкция трассировки. Сигнал SIGTRAP создается командой точки останова и другой командой прерывания. Отладчик использует такой сигнал.

SIGABRT:

Это называется сигналом прерывания. Сигнал SIGABRT создается путем вызова метода abort (). Такой сигнал используется, чтобы указать на неточность, наблюдаемую в вышеупомянутом коде и записанную при вызове метода abort ().

SIGFPE:

Исключение для чисел с плавающей точкой; Сигнал SIGFPE вырабатывается при возникновении катастрофической математической ошибки.

SIGUSR1 и SIGUSR2:

Сигналы SIGUSR1 и SIGUSR2 можно использовать так, как вам нравится. Для облегчения межпроцессного взаимодействия полезно создать обработчик сигналов для таких сигналов в приложении, которое получает сигнал.

Поведение сигналов по умолчанию:

Для каждого сигнала существует стандартное поведение или действие, и можно настроить поведение по умолчанию с помощью функции обработчика. Автоматическое поведение сигналов SIGKILL и SIGABRT нельзя было изменить или игнорировать.

Срок: Это прекратит операцию.

Основной: Будет создан документ дампа ядра, и операция будет прекращена.

Игн: Процесс пропустит сигнал.

Стоп: Это остановит операцию.

Продолжение: Операция будет поддерживаться от остановки.

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

Процесс имеет предпочтение поведения для сигнала, когда он подтвержден. Процесс может вести себя следующим образом:

Сигнал автоматически отклоняется, если определенное поведение сигнала игнорируется.

Используя такие методы, как signal или sigaction, код может зарегистрировать функцию-обработчик. Это называется перехват сигнала от обработчика.

Если сигнал не обрабатывается или игнорируется, может произойти стандартное действие.

Вы можете определить функцию обработки сигналов как:

$ Int signal () int signum, void (* funk) (целое число))

Когда обработка получает знак сигнала, метод signal () может вызвать метод func. Signal () возвращает указатель на метод func, если он успешен или исключение возвращается в errno и -1 вместо этого.

Указатель func может принимать три значения:

SIG_DFL: Это указатель на стандартный метод SIG DFL (), определенный в заголовке.h документ, используемый для получения стандартного поведения сигнала.

SIG_IGN: Это ссылка на метод игнорирования SIG IGN (), указанный в заголовке.h документ.

Указатель на метод обработчика, определяемый пользователем: Определяемый пользователем тип метода обработчика void (*) (int) подразумевает, что возвращаемая категория является недействительной, а единственный аргумент - int.

Сигнал создания нового файла.c 'и напишите в нем ниже код обработчика сигнала.

Свяжите сигнал.c файл с помощью gcc.

Во время работы сигнала.c, у нас есть бесконечный цикл, выполняемый в основном методе. При нажатии CTRL + C запускается метод-обработчик, и выполнение основного метода останавливается. Обработка основного метода продолжилась после выполнения метода-обработчика. При нажатии Ctrl + \ операция завершается.

Сигнал игнорировать:

Для просмотра сигнала создайте файл 'signal.c 'и напишите в нем код.

Свяжите игнорирование.c файл с помощью gcc.

Запустите сигнал.c файл. Нажмите CTRL + C, будет создан сигнал SIGNIT; тем не менее, поведение остается незамеченным, потому что метод обработчика перечисляется в методе SIG_IGN ().

Перерегистрировать обработчик сигналов:

Чтобы перерегистрировать обработчик сигнала, создайте новый файл rereg.c 'и впишите в него приведенный ниже код:

Связать ререг.c файл с помощью gcc.

Запустите перезапись.c файл. При первом нажатии CTRL + C вызывается метод обработчика, и обработчик сигнала повторно регистрируется в SIG_DFL. При повторном нажатии CTRL + C выполнение было прекращено.

Отправляйте сигналы с помощью Raise ():

Создать файл 'отправить.c 'и добавьте приведенный ниже код. Для отправки сигналов вызывающему методу используется метод raise ().

Свяжите отправку.c файл с помощью gcc.

Процесс использует метод raise () для передачи сигнала SIGUSR1 самостоятельно.

Отправлять сигналы с помощью Kill ():

Добавьте приведенный ниже код в строку "поднять".c '. Используйте метод kill () для отправки сигналов группе процессов.

Связать повышение.c файл с помощью gcc.

Используя метод kill (), процесс направляет сигнал SIGUSR1 вышеупомянутому.

Взаимодействие родителей и детей:

Чтобы наблюдать за взаимодействием родителей и детей, напишите приведенный ниже код в файл.

Связать комм.c файл с помощью gcc.

Fork () / method генерирует дочерний процесс, возвращает ноль дочернему процессу, а дочерний идентификатор - родительскому.

Заключение:

В этом руководстве мы увидели, как создавать, обрабатывать, отправлять, игнорировать, перерегистрировать и использовать сигнал для межпроцессного взаимодействия в Linux.

Как показать счетчик FPS в играх для Linux
Игры для Linux получили серьезный толчок, когда Valve объявила о поддержке Linux для клиента Steam и своих игр в 2012 году. С тех пор многие игры AAA ...
Как загрузить и играть в Sid Meier's Civilization VI в Linux
Введение в игру Civilization 6 - это современный подход к классической концепции, представленной в серии игр Age of Empires. Идея была довольно просто...
Как установить Doom и играть в него в Linux
Введение в Doom Серия Doom возникла в 90-х годах после выхода оригинальной Doom. Это мгновенно стал хитом, и с тех пор серия игр получила множество на...