12.2.3. Перехват сигналов
12.2.3. Перехват сигналов
Вместо использования функции signal() (чья семантика в процессе эволюции стала неправильной) POSIX-программы регистрируют обработчики сигналов с помощью sigaction().
#include <signal.h>
int sigaction(int signum, struct sigaction *act, struct sigaction *oact);
Этот системный вызов устанавливает обработчик сигнала signum, как определено с помощью act. Если oact не равен NULL, он принимает расположение обработчика перед вызовом sigaction(). Если act равен NULL, текущая установка обработчика остается неизменной, позволяя программе получить текущее расположение, не изменяя его. sigaction() возвращает 0 в случае успеха и ненулевое значение в случае ошибки. Ошибки случаются только если один или несколько параметров, переданных sigaction(), не верны.
Обработка сигнала ядром полностью описывается структурой struct sigaction.
#include <signal.h>
struct sigaction {
__sighandler_t sa_handler;
sigset_t sa_mask;
int sa_flags;
};
sa_handler — это указатель на функцию со следующим прототипом:
void handler(int signum);
Здесь signum устанавливается равным номеру сигнала, который является причиной вызова функции, sa_handler может указывать на функцию этого типа либо быть равным SIG_IGN или SIG_DFL.
Программа также специфицирует набор сигналов, которые должны блокироваться во время функционирования обработчика сигнала. Если обработчик предназначен для обработки нескольких различных сигналов (что легко сделать благодаря параметру signum), это средство существенно для предотвращения возникновения условия состязаний. sa_mask — это набор сигналов, включающий все сигналы, которые должны блокироваться при вызове обработчика. Однако доставленный сигнал блокируется независимо от того, что содержит sa_mask — если вы не хотите, чтобы он блокировался, укажите это флагом sa_flags — членом структуры struct sigaction.
Член sa_flags позволяет процессу модифицировать различные поведения сигнала. Он содержит один или более флагов, объединенных битовой операцией "ИЛИ"[61].
SA_NOCLDSTOP Обычно SIGCHLD генерируется, когда один из потомков процесса прерван или приостановлен (то есть всякий раз, когда wait4() должен вернуть информацию о состоянии процесса). Если флаг SA_NOCLDSTOP указан для сигнала SIGCHLD, то сигнал генерируется лишь в случае прерывания дочернего процесса; приостановка дочернего процесса не приводит к генерации каких-либо сигналов. SA_NOCLDSTOP не оказывает влияния ни на какой другой сигнал. SA_NODEFER Когда вызывается обработчик сигнала, сигнал автоматически не блокируется. Применение этого флага приводит к ненадежным сигналам, и он должен использоваться только для эмуляции ненадежных сигналов в приложениях, зависящих от такого поведения. Это идентично флагу SA_NOMASK в System V. SA_RESETHAND Когда присылается сигнал, обработчик сбрасывается в SIG_DFL. Этот флаг позволяет эмулировать функцию ANSI/ISO signal() в библиотеке пользовательского пространства. Идентично флагу SA_ONESHOT в System V. SA_RESTART Когда сигнал посылается процессу во время выполнения медленного системного вызова, системный вызов перезапускается после возврата управления из обработчика. Если флаг не указан, то системный вызов в этом случае возвращает ошибку и устанавливает errno равным EINTR.Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
10.2. Действия сигналов
10.2. Действия сигналов Каждый сигнал (вскоре мы представим полный список) имеет связанное с ним действие по умолчанию. POSIX обозначает это как диспозицию (disposition) сигнала. Это то действие, которое ядро осуществляет для процесса, когда поступает определенный сигнал. Действие
10.6.4. Перехват сигналов: sigaction()
10.6.4. Перехват сигналов: sigaction() Наконец мы готовы взглянуть на функцию sigaction(). Эта функция сложна, и мы намеренно опускаем множество деталей, которые предназначены для специального использования. Стандарт POSIX и справочная страница sigaction(2) предоставляют все подробности,
12.2.1. Посылка сигналов
12.2.1. Посылка сигналов Посылка сигналов от одного процесса другому обычно осуществляется с помощью системного вызова kill(). Этот системный вызов подробно обсуждался в главе 10. Вариантом kill() является tkill(), который не предназначен для прямого использования в программах.int
12.2.3. Перехват сигналов
12.2.3. Перехват сигналов Вместо использования функции signal() (чья семантика в процессе эволюции стала неправильной) POSIX-программы регистрируют обработчики сигналов с помощью sigaction().#include <signal.h>int sigaction(int signum, struct sigaction *act, struct sigaction *oact);Этот системный вызов устанавливает
12.2.6. Ожидание сигналов
12.2.6. Ожидание сигналов Когда программа построена преимущественно вокруг сигналов, часто необходимо, чтобы она ожидала появления какого-то сигнала, прежде чем продолжать работу. Системный вызов pause() предоставляет простую возможность для этого.#include <unistd.h>int
12.3.1. Описание сигналов
12.3.1. Описание сигналов Иногда приложения нуждаются в описании сигнала для отображения пользователю или помещения в журнал. Существуют три способа сделать это (см. главу 9). К сожалению, ни один из них не стандартизован.Самый старый метод предусматривает применение sys_siglist
7.2.1 Обработка сигналов
7.2.1 Обработка сигналов Ядро обрабатывает сигналы в контексте того процесса, который получает их, поэтому чтобы обработать сигналы, нужно запустить процесс. Существует три способа обработки сигналов: процесс завершается по получении сигнала, не обращает внимание на
10.7.1. Перехват соединения
10.7.1. Перехват соединения Вспомним полный цикл соединения с FTP-сервером и передачи файлов:1. Соединение с сервером.2. Авторизация.3. Запрос на скачивание файлов.4. Сервер открывает порт и сообщает его клиенту.5. Клиент подключается к указанному порту и получает или передает
14.5.4. Перехват соединения
14.5.4. Перехват соединения Атака на компьютеры с помощью перехвата соединения была первый раз применена еще несколько десятков лет назад, и до сих пор единственным эффективным методом борьбы с ней является использование шифрования пакетов.Когда компьютеры по протоколу TCP
23.3.4. Обработка сигналов
23.3.4. Обработка сигналов Перед тем, как перейти к следующему пункту, нужно еще раз рассмотреть функцию gtk_signal_connect(). Данной функции нужно передать четыре параметра:? GtkObject *object — объект, которому может быть послан сигнал;? const gchar *name — имя сигнала, например, «destroy»;? GtkSignalFunc func
14.1.2. Перехват вывода программы
14.1.2. Перехват вывода программы Простейший способ перехватить информацию, выведенную программой, — заключить команду в обратные кавычки, например:listing = `ls -l` # Одна строка будет содержать несколько строчек (lines).now = `date` # "Mon Mar 12 16:50:11 CST 2001"Обобщенный ограничитель %x
11.3. Перехват исключений
11.3. Перехват исключений В языке C++ исключения обрабатываются в предложениях catch. Когда какая-то инструкция внутри try-блока возбуждает исключение, то просматривается список последующих предложений catch в поисках такого, который может его обработать.Catch-обработчик состоит
11.3.4. Перехват всех исключений
11.3.4. Перехват всех исключений Иногда функции нужно выполнить определенное действие до того, как она завершит обработку исключения, даже несмотря на то, что обработать его она не может. К примеру, функция захватила некоторый ресурс, скажем открыла файл или выделила память
26.3.1. Перехват сигналов и выполнение действий
26.3.1. Перехват сигналов и выполнение действий А теперь создадим сценарий, выполняющий подсчет итераций до тех пор, пока пользователь не нажмет комбинацию клавиш [Ctrl+C] (сигнал 2). После этого сценарий отобразит сообщение, содержащее номер текущей итерации цикла.В этом
Глава 11 Перехват сеанса
Глава 11 Перехват сеанса В этой главе обсуждаются следующие темы: • Основные сведения о перехвате сеанса • Популярные инструментальные средства перехвата сеанса • Исследование атак типа MITM в зашифрованных соединениях · Резюме · Конспект · Часто задаваемые вопросы
Перехват
Перехват Одним из наиболее мощных средств в борьбе с преступлениями, диверсиями и мятежами является возможность перехватывать письменные и устные коммуникации. Именно эту привилегию ФБР отстаивает особенно рьяно.Перехват давно известен в американской истории. В 1624