Главная » 2017 » Ноябрь » 24 » man 2 sigqueue
05:28
man 2 sigqueue

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


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



ОБЗОР


#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() и используемый ей системный вызов rt_sigqueueinfo() впервые появились в
Linux 2.2.



АТРИБУТЫ


Описание терминов данного раздела смотрите в 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() */



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


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



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 406 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar