Linux
2017-09-15
Aliases: rt_tgsigqueueinfo(2), rt_tgsigqueueinfo(2), rt_tgsigqueueinfo(2), rt_tgsigqueueinfo(2)
man-pages-ru
Russian man pages from the Linux Documentation Project
manpages-dev
Manual pages about using GNU/Linux for development
man-pages
Linux kernel and C library user-space interface documentation
ИМЯ
rt_sigqueueinfo, rt_tgsigqueueinfo - ставит сигнал и данные в очередь
ОБЗОР
int rt_sigqueueinfo(pid_t tgid, int sig, siginfo_t *info);
int rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig, siginfo_t *info);
Замечание: В glibc нет обёрточных функций для этих системных вызовов; смотрите ЗАМЕЧАНИЯ.
ОПИСАНИЕ
Системные вызовы rt_sigqueueinfo() и rt_tgsigqueueinfo() предоставляют низкоуровневый интерфейс для отправки сигнала с данными процессу или нити. Приёмник сигнала может получить сопутствующие данные, установив обработчик сигнала с помощью sigaction(2) с флагом SA_SIGINFO.
Внутри ядра полю si_signo устанавливается значение, переданное в sig, так что получатель сигнала может также получить его номер через это поле.
Данные системные вызовы не предназначены для использования непосредственно из приложения; они нужны для реализации библиотечных функций sigqueue(3) и pthread_sigqueue(3).
Системный вызов rt_sigqueueinfo() отправляет сигнал sig группе нитей с идентификатором tgid (термин «группа нитей» является синонимом «процесс», а tid соответствует обычному идентификатору процесса UNIX). Сигнал будет доставлен произвольному члену группы нитей (т. е., одной из нитей, которая в этот момент не блокирует сигнал).
В аргументе info задаются сопутствующие сигналу данные. Этот аргумент является указателем на структуру типа siginfo_t, описанную в sigaction(2) (и определённую в <sigaction.h>). Вызывающий должен заполнить следующие поля структуры:
si_code | |||||
Значением должен быть один из кодов SI_*, перечисленных в файле исходного кода ядра Linux include/asm-generic/siginfo.h. посылается любому процессу, но не самому вызывающему, то накладываются следующие ограничения:
|
|||||
si_pid | Должно хранить идентификатор процесса, обычно PID отправителя. | ||||
si_uid | Должно хранить идентификатор пользователя, обычно UID реального пользователя отправителя. | ||||
si_value | |||||
Это поле хранит пользовательские данные, сопровождающие сигнал. Подробности смотрите в описании последнего аргумента (union sigval) функции sigqueue(3). |
Системный вызов rt_tgsigqueueinfo() похож на rt_sigqueueinfo(), но посылает сигнал и данные одной нити, указываемой комбинацией tgid — идентификатором группы нитей — и tid — нити из этой группы.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении эти системные вызовы возвращают 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение ошибки.
ОШИБКИ
EAGAIN | Достигнуто ограничение на количество сигналов в очереди (подробней об этом смотрите в signal(7)). |
EINVAL | Некорректное значение sig, tgid или tid. |
EPERM | Вызывающий не имеет прав для отправки сигнала по назначению. Требуемые права смотрите в kill(2). |
EPERM | В tgid указан процесс, отличный от вызывающего и значение info->si_code некорректно. |
ESRCH | rt_sigqueueinfo(): Группа нитей tgid не найдена. |
ВЕРСИИ
Системный вызов rt_sigqueueinfo() был добавлен в Linux версии 2.2. Системный вызов rt_tgsigqueueinfo() был добавлен в Linux версии 2.6.31.
СООТВЕТСТВИЕ СТАНДАРТАМ
Данные системные вызовы есть только в Linux.
ЗАМЕЧАНИЯ
Поскольку системные вызовы не предназначены для приложений, в glibc для них нет обёрточных функций. Используйте syscall(2) в том маловероятном случае, если вы хотите вызывать их напрямую.
Как и в случае с kill(2), может быть использован сигнал null (0), чтобы проверить, существует ли указанный процесс или нить.