table of contents
- Tumbleweed 4.28.0-1.1
- Leap-16.0
| rt_sigqueueinfo(2) | System Calls Manual | rt_sigqueueinfo(2) |
НАИМЕНОВАНИЕ¶
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).
The rt_sigqueueinfo() system call sends the signal sig to the thread group with the ID tgid. (The term "thread group" is synonymous with "process", and tgid corresponds to the traditional UNIX process ID.) The signal will be delivered to an arbitrary member of the thread group (i.e., one of the threads that is not currently blocking the signal).
В аргументе 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 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
| 17 мая 2025 г. | Справочные страницы Linux (невыпущенные) |