Отправить сигнал группе процессов, процессу или потоке
#include <signal.h>int sigqueue ( pid_t pid,int signo,const union sigval value );
libc
Функция sigqueue() инициирует отправку сигнала signo с указанным значением value в процесс pid. Если signo равен нулю, выполняется проверка ошибок, но фактически сигнал не посылается. Это один из способов проверить, корректен ли pid.
Условие разрешения процессу поместить сигнал в очередь другого процесса, такое же, как и для функции kill() — реальный или эффективный идентификатор пользователя отправляющего процесса должен совпадать с реальным или эффективным идентификатором пользователя для принимающего процесса.
Функция sigqueue() немедленно завершается. Если для signo установлен SA_SIGINFO
и доступны ресурсы для постановки сигнала в очередь, он ставится в очередь и отправляется принимающему процессу. Если SA_SIGINFO
не установлен для signo, то signo отправляется принимающему процессу, если сигнал еще не в очереди.
Если pid приводит к передаче signo и если signo не заблокирован в вызывающем потоке, а также ни один другой поток не имеет разблокированного signo и не ожидает в функции sigwait() для получения signo, тогда signo или один ожидающий разблокированный сигнал доставляется в вызывающий поток перед выходом из sigqueue().
Если для доставки выбран один из нескольких ожидающих сигналов в диапазоне от SIGRTMIN
до SIGRTMAX
, доставляется сигнал с наименьшим номером. Порядок выбора между сигналами реального времени и остальными, а также между несколькими ожидающими сигналами вне реального времени не определен.
_SC_SIGQUEUE_MAX
). Они все еще находятся в ожидании у получателя(-ей), либо превышен лимит общесистемных ресурсов. POSIX 1003.1 Realtime Signals Extension
kill(), signal(), SignalAction()
Предыдущий раздел: Описание API системной библиотеки