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

НАИМЕНОВАНИЕ

       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)