Стандартные или обычные сигналы:
Сигнал заголовочного файла.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.