Структура, характеризующая обработчик сигнала
#include <sys/neutrino.h>struct sigaction {#define sa_handler __sa_un._sa_handler#define sa_sigaction __sa_un._sa_sigactionunion {void (*_sa_handler)( _SIG_ARGS );void (*_sa_sigaction)( int, siginfo_t *, void * );} __sa_un;int sa_flags;sigset_t sa_mask;};
Тип позволяет производить операции с обработчиками сигналов. Структура включает следующие поля:
SIGCHLD
, то уведомление об остановке дочернего процесса не будет получено (т.е., в тех случаях, когда дочерний процесс получает сигнал SIGSTOP
). SA_SIGINFO
, сигналы будут поставлены в очередь, и все они будут доставлены. sa_handler и sa_sigaction реализованы как объединение и совместно используют общее хранилище. Они отличаются только своим прототипом: sa_handler используется для сигналов POSIX 1003.1a, а sa_sigaction для сигналов POSIX 1003.1b, поставленных в очередь в реальном времени. Значения, сохраненные с использованием любого имени, могут быть одним из:
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 системной библиотеки