struct sigaction

Структура, характеризующая обработчик сигнала

Прототип:

#include <sys/neutrino.h>
struct sigaction {
#define sa_handler __sa_un._sa_handler
#define sa_sigaction __sa_un._sa_sigaction
union {
void (*_sa_handler)( _SIG_ARGS );
void (*_sa_sigaction)( int, siginfo_t *, void * );
} __sa_un;
int sa_flags;
sigset_t sa_mask;
};

Описание:

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

void (*sa_handler)();
Адрес обработчика сигнала или действия для сигналов, не поставленных в очередь.
void (*sa_sigaction)( int signo, siginfo_t *info, void *other );
Адрес обработчика сигнала или действия для сигналов в очереди.
sigset_t sa_mask
Дополнительный набор сигналов, которые необходимо замаскировать (заблокировать) во время выполнения функции перехвата сигналов.
int sa_flags
Специальные флаги, влияющие на поведение сигнала:
SA_NOCLDSTOP
Если signum равен SIGCHLD, то уведомление об остановке дочернего процесса не будет получено (т.е., в тех случаях, когда дочерний процесс получает сигнал SIGSTOP).
SA_SIGINFO
Установить этот сигнал в очередь. По умолчанию доставленный процессу сигнал не ставится в очередь. Если сигнал не помещен в очередь, и один и тот же сигнал устанавливается несколько раз в процессе или потоке перед его запуском, доставлен будет только последний сигнал . Если установить флаг SA_SIGINFO, сигналы будут поставлены в очередь, и все они будут доставлены.

sa_handler и sa_sigaction реализованы как объединение и совместно используют общее хранилище. Они отличаются только своим прототипом: sa_handler используется для сигналов POSIX 1003.1a, а sa_sigaction для сигналов POSIX 1003.1b, поставленных в очередь в реальном времени. Значения, сохраненные с использованием любого имени, могут быть одним из:

function
Адрес функции перехвата сигналов.
SIG_DFL
Используйте действие по умолчанию для сигнала:
SIGCHLD, SIGIO, SIGURG, and SIGWINCH
Игнорировать сигнал (SIG_IGN).
SIGSTOP, SIGTSTP, SIGTTIN, and SIGTTOU
Остановить процесс.
SIGCONT
Продолжить работу программы.
All other signals
kill the process.
SIG_IGN
Игнорировать сигнал. Установка SIG_IGN для сигнала игнорирует все ожидающие сигналы, вне зависимости от того, заблокирован он или нет. Если ваш процесс игнорирует SIGCHLD, его дочерние процессы не станут зомби, и процесс не сможет использовать wait() или waitpid(), чтобы дождаться их завершения.

sa_handler или всегда вызывается со следующими аргументами:

void handler( int signo, siginfo_t *info, void *other );

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

void handler( int signo );

Микроядро передает дополнительные аргументы, но функция игнорирует их.

Классификация:

POSIX 1003.1, ЗОСРВ «Нейтрино»

Тематические ссылки:

siginfo_t, sigaction(), SignalAction(), SignalAction_r()




Предыдущий раздел: Описание API системной библиотеки