Provided by: manpages-ru-dev_4.26.0-1_all 

НАИМЕНОВАНИЕ
rt_sigqueueinfo, rt_tgsigqueueinfo - ставит сигнал и данные в очередь
БИБЛИОТЕКА
Стандартная библиотека языка C (libc, -lc)
ОБЗОР
#include <linux/signal.h> /* определения констант SI_* */
#include <sys/syscall.h> /* определения констант SYS_* */
#include <unistd.h>
int syscall(SYS_rt_sigqueueinfo, pid_t tgid,
int sig, siginfo_t *info);
int syscall(SYS_rt_tgsigqueueinfo, pid_t tgid, pid_t tid,
int sig, siginfo_t *info);
Замечание: В glibc нет обёрточных функций для этих системных вызовов; смотрите ЗАМЕЧАНИЯ.
ОПИСАНИЕ
Системные вызовы rt_sigqueueinfo() и rt_tgsigqueueinfo() предоставляют низкоуровневый интерфейс для
отправки сигнала с данными процессу или нити. Приёмник сигнала может получить сопутствующие данные,
установив обработчик сигнала с помощью sigaction(2) с флагом SA_SIGINFO.
Данные системные вызовы не предназначены для использования непосредственно из приложения; они нужны для
реализации библиотечных функций 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_USER,
используемый ядром для обозначения того, что сигнал послан kill(2), и нельзя указать SI_KERNEL,
который используется для обозначения того, что сигнал сгенерирован ядром.
• Кодом не может быть (начиная с 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).
EPERM В tgid указан процесс, отличный от вызывающего и значение info->si_code некорректно.
ESRCH rt_sigqueueinfo(): Группа нитей tgid не найдена.
rt_tgsigqueinfo(): Нить tid из tgid не найдена.
СТАНДАРТЫ
Linux.
ИСТОРИЯ
rt_sigqueueinfo()
Linux 2.2.
rt_tgsigqueueinfo()
Linux 2.6.31.
ПРИМЕЧАНИЯ
Поскольку системные вызовы не предназначены для приложений, в glibc для них нет обёрточных функций.
Используйте syscall(2) в том маловероятном случае, если вы хотите вызывать их напрямую.
Как и в случае с kill(2), может быть использован сигнал null (0), чтобы проверить, существует ли
указанный процесс или нить.
СМОТРИТЕ ТАКЖЕ
kill(2), pidfd_send_signal(2), sigaction(2), sigprocmask(2), tgkill(2), pthread_sigqueue(3), sigqueue(3),
signal(7)
ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и) aereiae <aereiae@gmail.com>, Azamat Hackimov
<azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Katrin Kutepova
<blackkatelv@gmail.com>, Lockal <lockalsash@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Баринов
Владимир, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной
лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских
переводчиков.
Справочные страницы Linux 6.9.1 2 мая 2024 г. rt_sigqueueinfo(2)