rt_sigqueueinfo - ставит сигнал и данные в очередь
rt_sigqueueinfo(2)
ставит сигнал и данные в очередь
Other Alias
rt_tgsigqueueinfo
ОБЗОР
int rt_sigqueueinfo(pid_t tgid, int sig, siginfo_t *uinfo);
int rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig,
siginfo_t *uinfo);
Замечание: В glibc нет обёрточных функций для этих системных вызовов;
смотрите
ЗАМЕЧАНИЯ.
ОПИСАНИЕ
Системные вызовы
rt_sigqueueinfo() и
rt_tgsigqueueinfo() предоставляют
низкоуровневый интерфейс для отправки сигнала с данными процессу или
нити. Приёмник сигнала может получить сопутствующие данные, установив
обработчик сигнала с помощью
sigaction(2) с флагом
SA_SIGINFO.
Данные системные вызовы не предназначены для использования непосредственно
из приложения; они нужны для реализации библиотечных функций sigqueue(3)
и pthread_sigqueue(3).
Системный вызов rt_sigqueueinfo() отправляет сигнал sig группе нитей с
идентификатором tgid (термин «группа нитей» является синонимом «процесс»,
а tid соответствует обычному идентификатору процесса UNIX). Сигнал будет
доставлен произвольному члену группы нитей (т. е., одной из нитей, которая в
этот момент не блокирует сигнал).
В аргументе uinfo задаются сопутствующие сигналу данные. Этот аргумент
является указателем на структуру типа siginfo_t, описанную в
sigaction(2) (и определённую в <sigaction.h>). Вызывающий
должен заполнить следующие поля структуры:
si_code
Значением должен быть один из кодов
SI_*, перечисленных в файле исходного
кода ядра Linux
include/asm-generic/siginfo.h, имеющих отрицательное
значение (т. е., нельзя указать
SI_USER, используемый ядром для
обозначения того, что сигнал послан
kill(2)) и нельзя указать (начиная с
Linux 2.6.39)
SI_TKILL (используется ядром для обозначения того, что
сигнал послан
tgkill(2)).
si_pid
Должно хранить идентификатор процесса, обычно PID отправителя.
si_uid
Должно хранить идентификатор пользователя, обычно UID реального пользователя
отправителя.
si_value
Это поле хранит пользовательские данные, сопровождающие сигнал. Подробности
смотрите в описании последнего аргумента (
union sigval) функции
sigqueue(3).
Внутри ядра полю si_signo устанавливается значение, переданное в sig,
так что получатель сигнала может также получить его номер через это поле.
Системный вызов rt_tgsigqueueinfo() похож на rt_sigqueueinfo(), но
посылает сигнал и данные одной нити, указываемой комбинацией tgid —
идентификатором группы нитей — и tid — нити из этой группы.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении эти системные вызовы возвращают 0. В случае ошибки
возвращается -1, а
errno устанавливается в соответствующее значение
ошибки.
ОШИБКИ
EAGAIN
Достигнуто ограничение на количество сигналов в очереди (подробней об этом
смотрите в signal(7)).
EINVAL
Некорректное значение sig, tgid или tid.
EPERM
Вызывающий не имеет прав для отправки сигнала по назначению. Требуемые права
смотрите в kill(2). Или некорректное значение uinfo->si_code.
ESRCH
rt_sigqueueinfo(): Группа нитей tgid не найдена.
rt_tgsigqueinfo(): Нить tid из tgid не найдена.
ВЕРСИИ
Системный вызов
rt_sigqueueinfo() был добавлен в Linux версии
2.2. Системный вызов
rt_tgsigqueueinfo() был добавлен в Linux версии
2.6.31.
СООТВЕТСТВИЕ СТАНДАРТАМ
Данные системные вызовы есть только в Linux.
ЗАМЕЧАНИЯ
Поскольку системные вызовы не предназначены для приложений, в glibc для них
нет обёрточных функций. Используйте
syscall(2) в том маловероятном
случае, если вы хотите вызывать их напрямую.
Как и в случае с kill(2), может быть использован сигнал null (0), чтобы
проверить, существует ли указанный процесс или нить.