Provided by: manpages-ru-dev_4.26.0-1_all 

НАИМЕНОВАНИЕ
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)