int sigqueue(pid_t pid, int sig, const union sigval value);
ОПИСАНИЕ
sigqueue()
отправляет сигнал, указанный в
sig
процессу с идентификатором PID, определенном
pid.
Требуются определенные права для отправки сигнала, такие же как и для
kill(2).
Как и в случае с
kill(2),
пустой сигнал (null, 0) может использоваться для проверки того, что
заданный PID вообще существует.
Аргумент
value
используется для указания сопутствующих элементов или данных (либо целых
либо указателей), отправляемых сигналу, и имеет следующий тип:
union sigval {
int sival_int;
void *sival_ptr;
};
Если процесс, принимающий сигнал, имеет для него обработчик, используя флаг
SA_SIGINFO
для
sigaction(2),
то он может получить данные через поле
si_value
структуры
siginfo_t
передаваемой как второй аргумент для обработчика.
Далее, поле
si_code
этой структуры будет установлено в
SI_QUEUE.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
При нормальном завершении работы
sigqueue()
возвращает 0, показывая что сигнал был успешно отправлен получающему процессу.
В других случаях будет возвращаться -1 и переменная
errno
будет установлена соответственно ошибке.
НАЙДЕННЫЕ ОШИБКИ
EAGAIN
Достигнуто ограничение передаваемых сигналов.
(см.
signal(7)).
EINVAL
sig
некорректен.
ESRCH
Нет процессов с идентификатором PID, соответствующем указанному
pid.
EPERM
Процесс не имеет прав для отправки сигнала получающему процессу.
(см.
kill(2)).
ЗАМЕЧАНИЯ
Если эта функция приводит к отправке сигнала процессу, породившему его,
и этот сигнал не заблокирован вызывающим подпроцессом, и никакие
другие подпроцессы не желают обрабатывать сигнал (либо разблокировав
его, либо ожидая использования
sigwait(3)),
то по меньшей мере некоторый сигнал должен быть отправлен этому
подпроцессу перед завершением функции и возвратом результатов.