Provided by: manpages-ru-dev_4.18.1-1_all bug

ИМЯ

       rt_sigqueueinfo, rt_tgsigqueueinfo - ставит сигнал и данные в очередь

LIBRARY

       Standard C library (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 не найдена.

ВЕРСИИ

       The  rt_sigqueueinfo()   system  call  was  added  in  Linux 2.2.  The rt_tgsigqueueinfo()
       system call was added in Linux 2.6.31.

СТАНДАРТЫ

       Данные системные вызовы есть только в Linux.

ЗАМЕЧАНИЯ

       Поскольку системные вызовы не предназначены для приложений, в 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>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.