sigsuspend

SIGSUSPEND(2)   Ð ÑководÑÑво пÑогÑаммиÑÑа Linux   SIGSUSPEND(2)



ÐÐЯ
       sigsuspend, rt_sigsuspend - ожидание Ñигнала

ÐÐÐÐÐ
       #include <signal.h>

       int sigsuspend(const sigset_t *mask);

   ТÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÐºÑоÑа ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑÑв Ð´Ð»Ñ glibc
   (Ñм. feature_test_macros(7)):

       sigsuspend(): _POSIX_C_SOURCE

ÐÐÐСÐÐÐÐ
       ÐÑзов sigsuspend() вÑеменно заменÑÐµÑ Ð¼Ð°ÑкÑ
       Ñигналов вÑзÑваÑÑего пÑоÑеÑÑа маÑкой,
       Ñказанной в mask, и заÑем пÑиоÑÑанавливаеÑ
       пÑоÑеÑÑ Ð´Ð¾ ÑÐµÑ Ð¿Ð¾Ñ, пока не поÑÑÑÐ¿Ð¸Ñ Ñигнал,
       Ð´Ð»Ñ ÐºÐ¾ÑоÑого запÑÑÑиÑÑÑ Ð¾Ð±ÑабоÑÑик Ñигнала
       или ÑÑо пÑиведÑÑ Ðº завеÑÑÐµÐ½Ð¸Ñ Ð¿ÑоÑеÑÑа.

       ÐÑли по ÑÐ¸Ð³Ð½Ð°Ð»Ñ Ð¿ÑоÑеÑÑ Ð·Ð°Ð²ÐµÑÑаеÑÑÑ, Ñо вÑзов
       sigsuspend() не возвÑаÑÐ°ÐµÑ ÑпÑавление обÑаÑно в
       пÑогÑаммÑ. ÐÑли Ñигнал пойман, Ñо возвÑÐ°Ñ Ð¸Ð·
       sigsuspend() пÑоизойдÑÑ Ð¿Ð¾Ñле завеÑÑениÑ
       вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±ÑабоÑÑика, и маÑка Ñигналов
       воÑÑÑановиÑÑÑ Ð² знаÑение, коÑоÑое бÑло до
       вÑзова sigsuspend().

       Ð¡Ð¸Ð³Ð½Ð°Ð»Ñ SIGKILL и SIGSTOP невозможно
       заблокиÑоваÑÑ; Ñказание ÑÑÐ¸Ñ ÑÑÐ¸Ñ Ñигналов в
       mask не влиÑÐµÑ Ð½Ð° маÑÐºÑ Ñигналов пÑоÑеÑÑа.

ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       ÐÑзов sigsuspend() вÑегда возвÑаÑÐ°ÐµÑ -1; errno
       пÑиÑваиваеÑÑÑ Ð½Ð¾Ð¼ÐµÑ Ð¾Ñибки (обÑÑно EINTR).

ÐШÐÐÐÐ
       EFAULT ÐÑгÑÐ¼ÐµÐ½Ñ mask ÑказÑÐ²Ð°ÐµÑ Ð½Ð° памÑÑÑ Ð²
              недопÑÑÑимой ÑаÑÑи адÑеÑного
              пÑоÑÑÑанÑÑва пÑоÑеÑÑа.

       EINTR  ÐÑзов бÑл пÑеÑван по ÑигналÑ; ÑмоÑÑиÑе
              signal(7).

СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       POSIX.1-2001, POSIX.1-2008.

ÐÐÐÐЧÐÐÐЯ
       ÐбÑÑно, sigsuspend() иÑполÑзÑеÑÑÑ Ð²Ð¼ÐµÑÑе Ñ sigprocmask(2),
       ÑÑÐ¾Ð±Ñ Ð¿ÑедоÑвÑаÑиÑÑ Ð´Ð¾ÑÑÐ°Ð²ÐºÑ Ñигнала пÑи
       вÑполнении кÑиÑиÑеÑкого ÑÑаÑÑка кода.
       СнаÑала вÑзÑваÑÑий блокиÑÑÐµÑ ÑÐ¸Ð³Ð½Ð°Ð»Ñ Ñ
       помоÑÑÑ sigprocmask(2). Ðогда кÑиÑиÑеÑкий ÑÑаÑÑок
       вÑполнен, вÑзÑваÑÑий наÑÐ¸Ð½Ð°ÐµÑ Ð¶Ð´Ð°ÑÑ
       Ñигналов Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð²Ñзова sigsuspend(), Ñказав
       маÑкÑ, знаÑение коÑоÑой бÑло возвÑаÑено
       вÑзовом sigprocmask(2) (в аÑгÑменÑе oldset).

       ÐодÑÐ¾Ð±Ð½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑабоÑе Ñ Ð½Ð°Ð±Ð¾Ñами
       Ñигналов еÑÑÑ Ð½Ð° ÑÑÑаниÑе sigsetops(3).

   ÐÑлиÑÐ¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñекой C и ÑдÑом
       ÐеÑвонаÑалÑно, ÑиÑÑемнÑй вÑзов Linux назÑвалÑÑ
       sigsuspend(). Ðднако, Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ Ñигналов
       ÑеалÑного вÑемени в Linux 2.2, 32-биÑнÑй
       аÑгÑÐ¼ÐµÐ½Ñ sigset_t неизменÑемого ÑазмеÑа,
       поддеÑживаемÑй ÑÑим ÑиÑÑемнÑм вÑзовом, не
       мог болÑÑе иÑполÑзоваÑÑÑÑ. Ð ÑезÑлÑÑаÑе бÑл
       добавлен новÑй ÑиÑÑемнÑй вÑзов rt_sigsuspend() Ñ
       ÑвелиÑеннÑм Ñипом sigset_t. У нового
       ÑиÑÑемного вÑзова поÑвилÑÑ Ð²ÑоÑой аÑгÑменÑ,
       size_t sigsetsize, в коÑоÑом ÑказÑваеÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ (в
       байÑаÑ) набоÑа Ñигналов mask. РнаÑÑоÑÑее вÑемÑ
       знаÑение ÑÑого аÑгÑменÑа должно бÑÑÑ Ñавно
       sizeof(sigset_t) (инаÑе Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка EINVAL).
       ÐбÑÑÑоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ glibc sigsuspend() ÑкÑÑÐ²Ð°ÐµÑ ÑÑо и
       вÑзÑÐ²Ð°ÐµÑ rt_sigsuspend(), еÑли он еÑÑÑ Ð² ÑдÑе.

СÐÐТРÐТРТÐÐÐÐ
       kill(2), pause(2), sigaction(2), signal(2), sigprocmask(2),
       sigwaitinfo(2), sigsetops(3), sigwait(3), signal(7)



Linux                             2016-03-15                     SIGSUSPEND(2)