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

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

       sigqueue - вставляет сигнал и данные в очередь процесса

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <signal.h>

       int sigqueue(pid_t pid, int sig, const union sigval value);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       sigqueue():
           _POSIX_C_SOURCE >= 199309L

ОПИСАНИЕ

       Вызов  sigqueue() отправляет сигнал, указанный в sig, процессу с идентификатором PID, определённом в pid.
       Требуются определённые права для отправки сигнала, такие же как для kill(2). Как и в  случае  с  kill(2),
       пустой сигнал (0) может использоваться для проверки того, что заданный PID вообще существует.

       Аргумент  value  используется  для указания сопутствующего элемента данных (либо целого, либо указателя),
       отправляемых сигналу, и имеет следующий тип:

           union sigval {
               int   sival_int;
               void *sival_ptr;
           };

       Если у процесса, принимающего сигнал, установлен обработчик посредством sigaction(2) с флагом SA_SIGINFO,
       то он может получить данные через поле si_value структуры siginfo_t, передаваемой как второй аргумент для
       обработчика. Кроме этого, значение поля si_code этой структуры будет установлено в SI_QUEUE.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При успешном выполнении sigqueue() возвращается 0, что означает, что сигнал попал в очередь  принимающего
       процесса. При ошибке возвращается -1 и в errno содержится код ошибки.

ОШИБКИ

       EAGAIN Достигнуто ограничение на количество сигналов в очереди (подробней об этом смотрите в signal(7)).

       EINVAL Значение sig некорректно.

       EPERM  Процесс  не  имеет  прав  для  отправки  сигнала принимающему процессу. Требуемые права смотрите в
              kill(2).

       ESRCH  Нет процесса с идентификатором PID, соответствующем указанному pid.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).
       ┌─────────────────────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ ИнтерфейсАтрибутЗначение │
       ├─────────────────────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │ sigqueue()                                                          │ Безвредность в нитях │ MT-Safe  │
       └─────────────────────────────────────────────────────────────────────┴──────────────────────┴──────────┘

ВЕРСИИ

   Отличия между библиотекой C и ядром
       В  Linux  sigqueue()  реализована  через  системный  вызов  rt_sigqueueinfo(2).  Данный  системный  вызов
       отличается  от  неё  третьим  аргументом:  структура siginfo_t, которая будет предоставляться обработчику
       сигнала принимающего процесса или  возвращаться  вызовом  sigtimedwait(2)  из  принимающего  процесса.  В
       обёрточной функции glibc sigqueue() этот аргумент, uinfo, инициализируется следующим образом:

           uinfo.si_signo = sig;      /* аргумент, передаваемый в sigqueue() */
           uinfo.si_code = SI_QUEUE;
           uinfo.si_pid = getpid();   /* ID процесса отправителя */
           uinfo.si_uid = getuid();   /* реальный UID отправителя */
           uinfo.si_value = val;      /* аргумент, передаваемый в sigqueue() */

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       Linux 2.2.  POSIX.1-2001.

ПРИМЕЧАНИЯ

       Если  этот  вызов приводит к отправке сигнала процессу, который его вызвал, и этот сигнал не заблокирован
       вызывающей нитью, и никакие другие нити не желают обрабатывать сигнал (либо он для них  не  заблокирован,
       либо они ожидали его с помощью sigwait(3), то, по меньшей мере, сигнал должен быть доставлен этой нити до
       завершения этого вызова.

СМОТРИТЕ ТАКЖЕ

       kill(2), rt_sigqueueinfo(2), sigaction(2), signal(2), pthread_sigqueue(3), sigwait(3), signal(7)

ПЕРЕВОД

       Русский  перевод  этой  страницы  руководства разработал(и) Alexander Golubev <fatzer2@gmail.com>, Azamat
       Hackimov  <azamat.hackimov@gmail.com>,  Hotellook,   Nikita   <zxcvbnm3230@mail.ru>,   Spiros   Georgaras
       <sng@hellug.gr>,  Vladislav  <ivladislavefimov@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 г.                                      sigqueue(3)