SA_ONSTACK | Если определена функция-обработчик сигнала, и с помощью функции |
SA_RESETHAND * | Если определена функция-обработчик, то диспозиция сигнала будет изменена на SIG_DFL , и сигнал не будет блокироваться при запуске обработчика. Если флаг не установлен, диспозиция сигнала остается неизменной. |
SA_NODEFER * | Если определена функция-обработчик, то сигнал блокируется на время обработки только в том случае, если он явно указан в поле sa_mask . Если флаг не установлен, в процессе обработки данный сигнал автоматически блокируется. |
SA_RESTART | Если определена функция-обработчик, ряд системных вызовов, выполнение которых было прервано полученным сигналом, будут автоматически перезапущены после обработки сигнала.[25] Если флаг не установлен, системный вызов возвратит ошибку EINTR . |
SA_SIGINFO * | Если диспозиция указывает на перехват сигнала, вызывается функция, адресованная полем sa_sigaction . Если флаг не установлен, вызывается обработчик sa_handler . |
SA_NOCLDWAIT * | Если указанный аргументом sig сигнал равен SIGCHLD , при завершении потомки не будут переходить в состояние зомби. Если процесс в дальнейшем вызовет функции |
SA_NOCLDSTOP * | Если указанный аргументом sig сигнал равен SIGCHLD , указанный сигнал не будет отправляться процессу при завершении или останове любого из его потомков. |
*Данные флаги не определены для UNIX BSD.
В системах UNIX BSD 4.x структура sigaction
имеет следующий вид:
struct sigaction {
void (*sa_handler)();
sigset_t sa_mask;
int sa_flags;
};
где функция-обработчик определена следующим образом:
void handler(int signo, int code, struct sigcontext *scp);
В первом аргументе signo
содержится номер сигнала, code
определяет дополнительную информацию о причине поступления сигнала, a scp
указывает на контекст процесса.
Для UNIX System V реализована следующая возможность получения более полной информации о сигнале. Если установлен флаг SA_SIGINFO
, то при получении сигнала sig
будет вызван обработчик, адресованный полем sa_sigaction
. Помимо номера сигнала, обычно передаваемого обработчику сигнала, ему будет переданы указатель на структуру siginfo_t
, содержащую информацию о причинах получения сигнала, а также указатель на структуру ucontext_t
, содержащую контекст процесса.
Структура siginfo_t
определена в файле
int si_signo | Номер сигнала |
int si_errno | Номер ошибки |
int si_code | Причина отправления сигнала |
В поле si_signo
хранится номер сигнала. Поле si_code
имеет следующий смысл: если его значение меньше или равно нулю, значит сигнал был отправлен прикладным процессом, в этом случае структура siginfo_t
содержит также следующие поля:
pid_t si_pid | Идентификатор процесса PID |
uid_t si_uid | Идентификатор пользователя UID |
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии