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

ИМЯ

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

LIBRARY

       Standard C library (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.

ВЕРСИИ

       sigqueue()   and  the  underlying  rt_sigqueueinfo(2)  system call first appeared in Linux
       2.2.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).

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

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008.

ЗАМЕЧАНИЯ

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

   Отличия между библиотекой 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() */

СМ. ТАКЖЕ

       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>

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

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