SIGACTION(2) Ð ÑководÑÑво пÑогÑаммиÑÑа Linux SIGACTION(2) ÐÐЯ sigaction, rt_sigaction - полÑÑÐ°ÐµÑ Ð¸ изменÑÐµÑ Ð¾Ð±ÑабоÑÑик Ñигнала ÐÐÐÐÐ #include <signal.h> int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); ТÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÐºÑоÑа ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑÑв Ð´Ð»Ñ glibc (Ñм. feature_test_macros(7)): sigaction(): _POSIX_C_SOURCE siginfo_t: _POSIX_C_SOURCE >= 199309L ÐÐÐСÐÐÐРСиÑÑемнÑй вÑзов sigaction() иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑполнÑемого пÑоÑеÑÑом дейÑÑÐ²Ð¸Ñ Ð¿Ñи полÑÑении опÑеделÑнного Ñигнала (ÑпиÑок Ñигналов ÑмоÑÑиÑе в signal(7)). Ð signum ÑказÑваеÑÑÑ Ñигнал; Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð½Ð°Ñение лÑбого коÑÑекÑного Ñигнала за иÑклÑÑением SIGKILL и SIGSTOP. ÐÑли знаÑение act не Ñавно NULL, Ñо ÑÑÑанавливаеÑÑÑ Ð½Ð¾Ð²Ð¾Ðµ дейÑÑвие Ð´Ð»Ñ Ñигнала signum из act. ÐÑли знаÑение oldact не Ñавно NULL, Ñо пÑедÑдÑÑее дейÑÑвие запиÑÑваеÑÑÑ Ð² oldact. СÑÑÑкÑÑÑа sigaction опÑеделена ÑледÑÑÑим обÑазом: struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer)(void); }; ÐÐ»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð°ÑÑиÑекÑÑÑ Ð¸ÑполÑзÑеÑÑÑ union: не вÑполнÑйÑе назнаÑение одновÑеменно sa_handler и sa_sigaction. Ðоле sa_restorer не пÑедназнаÑено Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² пÑиложении (в POSIX sa_restorer не опÑеделÑно). ÐÑедназнаÑение ÑÑого Ð¿Ð¾Ð»Ñ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ опиÑано в sigreturn(2). sa_handler ÑказÑÐ²Ð°ÐµÑ Ð´ÐµÐ¹ÑÑвие, коÑоÑое должно бÑÑÑ ÑвÑзано Ñ signum; Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð½Ð°Ñение SIG_DFL в каÑеÑÑве дейÑÑÐ²Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, SIG_IGN, ÑÑÐ¾Ð±Ñ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑ ÑÑÐ¾Ñ Ñигнал, или пÑинимаÑÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑнкÑÐ¸Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñигналом. ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ð½Ð¾Ð¼ÐµÑ Ñигнала в каÑеÑÑве Ñвоего единÑÑвенного аÑгÑменÑа. ÐÑли в sa_flags Ñказан SA_SIGINFO, Ñо sa_sigaction (вмеÑÑо sa_handler) задаÑÑ ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑабоÑки Ñигнала signum. РпеÑвом аÑгÑменÑе ÑÑнкÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ð¾Ð¼ÐµÑ Ñигнала, во вÑоÑом â ÑказаÑÐµÐ»Ñ Ð½Ð° siginfo_t и в ÑÑеÑÑем â ÑказаÑÐµÐ»Ñ Ð½Ð° ucontext_t (пÑиведÑннÑй к void *) (вообÑе, ÑÑнкÑиÑ-обÑабоÑÑик не иÑполÑзÑеÑÑÑ ÑÑеÑий аÑгÑменÑ. ÐодÑобней о ucontext_t ÑмоÑÑиÑе в getcontext(3)). Ð sa_mask задаÑÑÑÑ Ð¼Ð°Ñка Ñигналов, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑÑÑ (Ñ.е. добавлÑеÑÑÑ Ðº маÑке Ñигналов ниÑи, в коÑоÑой вÑзÑваеÑÑÑ Ð¾Ð±ÑабоÑÑик Ñигнала) пÑи вÑполнении обÑабоÑÑика Ñигнала. Также бÑÐ´ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑÑÑ Ð¸ Ñигнал, вÑзвавÑий запÑÑк обÑабоÑÑика, еÑли ÑолÑко не бÑл иÑполÑзован Ñлаг SA_NODEFER. Ð flag ÑказÑваеÑÑÑ Ð½Ð°Ð±Ð¾Ñ Ñлагов, коÑоÑÑе изменÑÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ Ñигнала. Ðн ÑоÑмиÑÑеÑÑÑ Ð¿Ð¾Ð±Ð¸ÑовÑм ÐÐРиз ÑледÑÑÑÐ¸Ñ Ñлагов: SA_NOCLDSTOP ÐÑли знаÑение signum Ñавно SIGCHLD, Ñо Ñведомление об оÑÑановке доÑеÑнего пÑоÑеÑÑа (Ñ.е., в ÑÐµÑ ÑлÑÑаÑÑ, когда доÑеÑний пÑоÑеÑÑ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ Ñигнал SIGSTOP, SIGTSTP, SIGTTIN или SIGTTOU) или возобновлении ÑабоÑÑ (Ñ.е., когда доÑеÑний пÑоÑеÑÑ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ SIGCONT) не бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑено (Ñм. wait(2)). ÐÑÐ¾Ñ Ñлаг Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение ÑолÑко когда ÑÑÑановлен обÑабоÑÑик SIGCHLD. SA_NOCLDWAIT (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6) ÐÑли знаÑение signum Ñавно SIGCHLD, Ñо доÑеÑние пÑоÑеÑÑÑ Ð½Ðµ бÑдÑÑ Ð¿ÐµÑеводиÑÑÑÑ Ð² ÑоÑÑоÑние зомби пÑи завеÑÑении. СмоÑÑиÑе Ñакже waitpid(2). ÐÑÐ¾Ñ Ñлаг Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение ÑолÑко когда ÑÑÑановлен обÑабоÑÑик SIGCHLD или когда обÑабоÑÑик Ñигнала ÑÑÑановлен в SIG_DFL. ÐÑли Ñлаг SA_NOCLDWAIT не задан пÑи ÑÑÑановке обÑабоÑÑика SIGCHLD, Ñо по POSIX.1 оÑÑаÑÑÑÑ Ð½ÐµÐ¾Ð¿ÑеделÑннÑм, бÑÐ´ÐµÑ Ð»Ð¸ генеÑиÑоваÑÑÑÑ Ñигнал SIGCHLD пÑи завеÑÑении доÑеÑнего пÑоÑеÑÑа. Ð Linux Ñигнал SIGCHLD в ÑÑом ÑлÑÑае генеÑиÑÑеÑÑÑ; в некоÑоÑÑÑ Ð´ÑÑÐ³Ð¸Ñ ÑеализаÑиÑÑ ÑÑо не делаеÑÑÑ. SA_NODEFER Ðе пÑепÑÑÑÑвоваÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ñигнала пÑи его обÑабоÑке обÑабоÑÑиком Ñигнала. ÐÑÐ¾Ñ Ñлаг Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение ÑолÑко когда ÑÑÑановлен обÑабоÑÑик. Флаг SA_NOMASK ÑвлÑеÑÑÑ ÑÑÑаÑевÑим Ñинонимом данного Ñлага. SA_ONSTACK ÐÑзÑваÑÑ Ð¾Ð±ÑабоÑÑик Ñигнала в дополниÑелÑном ÑÑеке Ñигналов, пÑедоÑÑавленном sigaltstack(2). ÐÑли дополниÑелÑнÑй ÑÑек недоÑÑÑпен, Ñо бÑÐ´ÐµÑ Ð¸ÑполÑзован ÑÑек по ÑмолÑаниÑ. ÐÑÐ¾Ñ Ñлаг Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение ÑолÑко когда ÑÑÑановлен обÑабоÑÑик. SA_RESETHAND ÐоÑÑÑановиÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ Ñигнала в знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ñле вÑода в обÑабоÑÑик Ñигнала. ÐÑÐ¾Ñ Ñлаг Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение ÑолÑко когда ÑÑÑановлен обÑабоÑÑик. Флаг SA_ONESHOT ÑвлÑеÑÑÑ ÑÑÑаÑевÑим Ñинонимом данного Ñлага. SA_RESTART ÐбеÑпеÑиваÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ ÑовмеÑÑимое Ñ ÑеманÑикой Ñигналов BSD, позволÑÑ Ð½ÐµÐºÐ¾ÑоÑÑм ÑиÑÑемнÑм вÑзовам пеÑезапÑÑкаÑÑÑÑ Ð² Ñо вÑемÑ, как Ð¸Ð´ÐµÑ Ð¾Ð±ÑабоÑка Ñигналов. ÐÑÐ¾Ñ Ñлаг Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение ÑолÑко когда ÑÑÑановлен обÑабоÑÑик. РпеÑезапÑÑке ÑиÑÑемнÑÑ Ð²Ñзовов ÑмоÑÑиÑе в signal(7). SA_RESTORER Ðе пÑедназнаÑен Ð´Ð»Ñ Ð¿Ñиложений. ÐаннÑй Ñлаг иÑполÑзÑеÑÑÑ Ð² библиоÑÐµÐºÐ°Ñ C Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð½Ð° Ñо, ÑÑо поле sa_restorer ÑодеÑÐ¶Ð¸Ñ Ð°Ð´ÑÐµÑ Â«Ð¿ÑÑжковÑм моÑÑиком в Ñигнал" (signal trampoline). ÐодÑобней ÑмоÑÑиÑе в sigreturn(2). SA_SIGINFO (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.2) ÐбÑабоÑÑик Ñигнала ÑÑебÑÐµÑ ÑÑÑÑ Ð°ÑгÑменÑов, а не одного. Ð ÑÑом ÑлÑÑае надо иÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑ sa_sigaction вмеÑÑо sa_handler. ÐÑÐ¾Ñ Ñлаг Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение ÑолÑко когда ÑÑÑановлен обÑабоÑÑик. ÐÑгÑÐ¼ÐµÐ½Ñ siginfo_t в sa_sigaction пÑедÑÑавлÑÐµÑ Ñобой ÑÑÑÑкÑÑÑÑ Ñо ÑледÑÑÑими полÑми: siginfo_t { int si_signo; /* ÐÐ¾Ð¼ÐµÑ Ñигнала */ int si_errno; /* ÐнаÑение errno */ int si_code; /* Ðод Ñигнала */ int si_trapno; /* ÐÐ¾Ð¼ÐµÑ Ð»Ð¾Ð²ÑÑки, коÑоÑÑÑ Ð²Ñзвал аппаÑаÑнÑй Ñигнал (не иÑполÑзÑеÑÑÑ Ð½Ð° болÑÑинÑÑве аÑÑиÑекÑÑÑ) */ pid_t si_pid; /* ID пÑоÑеÑÑа, поÑлавÑего Ñигнал */ uid_t si_uid; /* ID ÑеалÑного полÑзоваÑÐµÐ»Ñ Ð¿ÑоÑеÑÑа, поÑлавÑего Ñигнал */ int si_status; /* ÐÑÑодное знаÑение или Ð½Ð¾Ð¼ÐµÑ Ñигнала */ clock_t si_utime; /* ÐÑполÑзованное полÑзоваÑелÑÑкое вÑÐµÐ¼Ñ */ clock_t si_stime; /* ÐÑполÑзованное ÑиÑÑемное вÑÐµÐ¼Ñ */ sigval_t si_value; /* ÐнаÑение Ñигнала */ int si_int; /* Сигнал POSIX.1b */ void *si_ptr; /* Сигнал POSIX.1b */ int si_overrun; /* СÑÑÑÑик пеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑаймеÑа; ÑаймеÑÑ POSIX.1b */ int si_timerid; /* ID ÑаймеÑа; ÑаймеÑÑ POSIX.1b */ void *si_addr; /* ÐдÑÐµÑ Ð¿Ð°Ð¼ÑÑи, пÑиводÑÑий к оÑибке */ long si_band; /* ÐнÑÑÑеннее ÑобÑÑие (бÑл int в glibc 2.3.2 и более ÑанниÑ) */ int si_fd; /* ФайловÑй деÑкÑипÑÐ¾Ñ */ short si_addr_lsb; /* Ðаименее знаÑимÑй Ð±Ð¸Ñ Ð°Ð´ÑеÑа (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6.32) */ void *si_lower; /* ÐижнÑÑ Ð³ÑаниÑа пÑи наÑÑÑении адÑеÑа (наÑÐ¸Ð½Ð°Ñ Ñ Linux 3.19) */ void *si_upper; /* ÐеÑÑнÑÑ Ð³ÑаниÑа пÑи наÑÑÑении адÑеÑа (наÑÐ¸Ð½Ð°Ñ Ñ Linux 3.19) */ int si_pkey; /* ÐлÑÑа заÑиÑÑ Ð² PTE, коÑоÑÑй пÑивÑл к оÑибке (наÑÐ¸Ð½Ð°Ñ Ñ Linux 4.6) */ void *si_call_addr; /* ÐдÑÐµÑ Ð¸Ð½ÑÑÑÑкÑии ÑиÑÑемного вÑзова (наÑÐ¸Ð½Ð°Ñ Ñ Linux 3.5) */ int si_syscall; /* ÐолиÑеÑÑво попÑÑок ÑиÑÑемного вÑзова (наÑÐ¸Ð½Ð°Ñ Ñ Linux 3.5) */ unsigned int si_arch; /* ÐÑÑиÑекÑÑÑа пÑÑавÑегоÑÑ ÑиÑÑемного вÑзова (наÑÐ¸Ð½Ð°Ñ Ñ Linux 3.5) */ } ÐÐ¾Ð»Ñ si_signo, si_errno и si_code опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð´Ð»Ñ Ð²ÑÐµÑ Ñигналов. (si_errno обÑÑно не иÑполÑзÑеÑÑÑ Ð² Linux.) ÐÑÑавÑаÑÑÑ ÑаÑÑÑ ÑÑÑÑкÑÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедÑÑавлÑÑÑ Ñобой обÑединение, поÑÑÐ¾Ð¼Ñ Ð½Ñжно ÑиÑаÑÑ ÑолÑко Ñе полÑ, коÑоÑÑе имеÑÑ ÑмÑÑл Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ñигнала: * ÐÐ»Ñ Ñигналов, поÑÑлаемÑÑ kill(3) и sigqueue(3), заполнÑÑÑÑÑ si_pid и si_uid. Также Ð´Ð»Ñ Ñигналов, поÑÑлаемÑÑ sigqueue(3), заполнÑÑÑÑÑ si_int и si_ptr знаÑениÑми, задаваемÑми оÑпÑавиÑелем Ñигнала; подÑобней ÑмоÑÑиÑе sigqueue(3). * ÐÐ»Ñ Ñигналов, поÑÑлаемÑÑ ÑаймеÑами POSIX.1b (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6), заполнÑÑÑÑÑ si_overrun и si_timerid. Ðоле si_timerid ÑвлÑеÑÑÑ Ð²Ð½ÑÑÑенним иденÑиÑикаÑоÑом, коÑоÑÑй иÑполÑзÑеÑÑÑ ÑдÑом Ð´Ð»Ñ ÑазлиÑÐµÐ½Ð¸Ñ ÑаймеÑов; ÑÑо не иденÑиÑикаÑÐ¾Ñ ÑаймеÑа, возвÑаÑаемого timer_create(2). Ðоле si_overrun оÑÑÐ°Ð¶Ð°ÐµÑ ÑÑÑÑÑик пÑевÑÑÐµÐ½Ð¸Ñ ÑаймеÑа; ÑÑÑ Ð¶Ðµ инÑоÑмаÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð²Ñзова timer_getoverrun(2). ÐÑи Ð¿Ð¾Ð»Ñ ÑвлÑÑÑÑÑ Ð½ÐµÑÑандаÑÑнÑм ÑаÑÑиÑением Linux. * ÐÐ»Ñ Ñигналов, поÑÑлаемÑÑ Ñведомлением оÑеÑеди ÑообÑений (Ñм. опиÑание SIGEV_SIGNAL в mq_notify(3)), заполнÑÑÑÑÑ si_int/si_ptr знаÑением sigev_value, пÑедоÑÑавлÑемÑм mq_notify(3); si_pid — знаÑением иденÑиÑикаÑоÑа пÑоÑеÑÑа, оÑпÑавивÑего ÑообÑение; si_uid — знаÑением ÑеалÑного иденÑиÑикаÑоÑа полÑзоваÑелÑ, оÑпÑавивÑего ÑообÑение. * ÐÐ»Ñ SIGCHLD заполнÑÑÑÑÑ si_pid, si_uid, si_status, si_utime и si_stime, пÑедоÑÑавлÑÑÑие инÑоÑмаÑÐ¸Ñ Ð¾ поÑомке. Рполе si_pid ÑказÑваеÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¿ÑоÑеÑÑа поÑомка; в si_uid â ÑеалÑнÑй полÑзоваÑелÑÑкий иденÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ñомка. Рполе si_status ÑодеÑжиÑÑÑ ÐºÐ¾Ð´ завеÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ñомка (еÑли si_code Ñавно CLD_EXITED) или Ð½Ð¾Ð¼ÐµÑ Ñигнала, коÑоÑÑй вÑзвал изменение ÑоÑÑоÑÐ½Ð¸Ñ Ð¿ÑоÑеÑÑа. ÐÐ¾Ð»Ñ si_utime и si_stime ÑодеÑÐ¶Ð°Ñ ÑиÑÑемное и полÑзоваÑелÑÑкое вÑÐµÐ¼Ñ Ð¦Ð, заÑÑаÑенное пÑоÑеÑÑом-поÑомком; ÑÑи Ð¿Ð¾Ð»Ñ Ð½Ðµ ÑодеÑÐ¶Ð°Ñ Ð²ÑемÑ, иÑполÑзованное на ожидание поÑомков (в оÑлиÑие Ð¾Ñ getrusage(2) и times(2)). Ð ÑдÑÐ°Ñ Ð´Ð¾ веÑÑии 2.6 и наÑÐ¸Ð½Ð°Ñ Ñ 2.6.27 ÑÑи Ð¿Ð¾Ð»Ñ ÑодеÑÐ¶Ð°Ñ Ð²ÑÐµÐ¼Ñ Ð¦Ð Ð² единиÑÐ°Ñ sysconf(_SC_CLK_TCK). Ð ÑдÑÐ°Ñ 2.6 до 2.6.27 оÑибоÑно ÑÑиÑалоÑÑ, ÑÑо ÑÑи Ð¿Ð¾Ð»Ñ ÑодеÑÐ¶Ð°Ñ Ð²ÑÐµÐ¼Ñ Ð² единиÑÐ°Ñ (наÑÑÑаиваемÑÑ) ÑиÑÑемнÑÑ Ð¼Ð¸Ð³Ð¾Ð² (jiffy) (ÑмоÑÑиÑе time(7)). * ÐÑи SIGILL, SIGFPE, SIGSEGV, SIGBUS и SIGTRAP заполнÑеÑÑÑ si_addr адÑеÑом оÑибки. Ðа некоÑоÑÑÑ Ð°ÑÑиÑекÑÑÑÐ°Ñ Ð´Ð»Ñ ÑÑи Ñигналов Ñакже заполнÑеÑÑÑ Ð¿Ð¾Ð»Ðµ si_trapno. ÐекоÑоÑÑе оÑделÑнÑе ваÑианÑÑ SIGBUS, в ÑаÑÑноÑÑи BUS_MCEERR_AO и BUS_MCEERR_AR, Ñакже заполнÑÑÑ si_addr_lsb. ÐÑо поле ÑказÑÐ²Ð°ÐµÑ Ð½Ð° наименее знаÑимÑй Ð±Ð¸Ñ ÑообÑаемого адÑеÑа и поÑÑÐ¾Ð¼Ñ Ð¿Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¿Ð¾Ð²ÑеждениÑ. ÐапÑимеÑ, еÑли бÑла повÑеждена ÑÑÑаниÑа Ñеликом, Ñо si_addr_lsb ÑодеÑÐ¶Ð¸Ñ log2(sysconf(_SC_PAGESIZE)). Ðогда доÑÑавлÑеÑÑÑ SIGTRAP в оÑÐ²ÐµÑ Ð½Ð° ÑобÑÑие ptrace(2) (PTRACE_EVENT_foo), Ñо si_addr не заполнÑеÑÑÑ, но заполнÑÑÑÑÑ si_pid и si_uid ÑооÑвеÑÑÑвÑÑÑими ID пÑоÑеÑÑа и полÑзоваÑелÑ, оÑвеÑÑÑвенного за полÑÑение ÑÑапа. Ð ÑлÑÑае seccomp(2), ÑÑаÑÑиÑÑемÑй бÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ как полÑÑаÑÑий ÑобÑÑие. BUS_MCERR_* и si_addr_lsb ÑвлÑÑÑÑÑ ÑаÑÑиÑениÑми Linux. ÐÐ»Ñ Ð¾ÑделÑного ваÑианÑа SEGV_BNDERR из SIGSEGV заполнÑÑÑÑÑ si_lower и si_upper. ÐÐ»Ñ Ð¾ÑделÑного ваÑианÑа SEGV_PKUERR из SIGSEGV заполнÑеÑÑÑ si_pkey. * ÐÐ»Ñ SIGIO/SIGPOLL (ÑÐ¸Ð½Ð¾Ð½Ð¸Ð¼Ñ Ð² Linux) заполнÑÑÑÑÑ si_band и si_fd. СобÑÑие si_band пÑедÑÑавлÑÐµÑ Ñобой биÑовÑÑ Ð¼Ð°ÑкÑ, ÑодеÑжаÑÑÑ Ñе же знаÑениÑ, коÑоÑÑе заполнÑÑÑÑÑ Ð² поле revents вÑзовом poll(2). Ðоле si_fd ÑодеÑÐ¶Ð¸Ñ ÑайловÑй деÑкÑипÑоÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑого пÑоизоÑло ÑобÑÑие ввода-вÑвода; дополниÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ ÑмоÑÑиÑе в опиÑании F_SETSIG на ÑÑÑаниÑе fcntl(2). * ÐÐ»Ñ SIGSYS, генеÑиÑÑемого (наÑÐ¸Ð½Ð°Ñ Ñ Linux 3.5), когда ÑилÑÑÑ seccomp возвÑаÑÐ°ÐµÑ SECCOMP_RET_TRAP, заполнÑÑÑÑÑ si_call_addr, si_syscall, si_arch, si_errno и дÑÑгие полÑ, как опиÑÑваеÑÑÑ Ð² seccomp(2). Рполе si_code ÑодеÑжиÑÑÑ Ð·Ð½Ð°Ñение (не маÑка биÑов), опÑеделÑÑÑее пÑиÑÐ¸Ð½Ñ Ð¾ÑпÑавки Ñигнала. ÐÑи ÑобÑÑии ptrace(2) в si_code бÑÐ´ÐµÑ ÑодеÑжаÑÑÑÑ SIGTRAP и ÑобÑÑие ptrace в ÑÑаÑÑем байÑе: (SIGTRAP | PTRACE_EVENT_foo << 8). ÐÐ»Ñ Ð¾Ð±ÑÑного Ñигнала в ÑледÑÑÑей ÑаблиÑе пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð·Ð½Ð°ÑениÑ, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð² si_code Ð´Ð»Ñ Ð»Ñбого Ñигнала вмеÑÑе Ñ Ð¿ÑиÑиной Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ Ñигнала: SI_USER kill(2). SI_KERNEL поÑÑлаеÑÑÑ ÑдÑом SI_QUEUE sigqueue(3). SI_TIMER ÑÐ°Ð¹Ð¼ÐµÑ POSIX иÑÑÑк. SI_MESGQ (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6.6) изменилоÑÑ ÑоÑÑоÑние оÑеÑеди ÑообÑений POSIX; Ñм. mq_notify(3). SI_ASYNCIO AIO завеÑÑÑн. SI_SIGIO Queued SIGIO (ÑолÑко в ÑдÑÐ°Ñ Ð´Ð¾ Linux 2.2; наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.4 SIGIO/SIGPOLL заполнÑÑÑ si_code как опиÑано вÑÑе). SI_TKILL (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.4.19) tkill(2) или tgkill(2). СледÑÑÑие знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² si_code Ð´Ð»Ñ Ñигнала SIGILL: ILL_ILLOPC ÐекоÑÑекÑнÑй код инÑÑÑÑкÑии. ILL_ILLOPN ÐекоÑÑекÑнÑй опеÑанд. ILL_ILLADR ÐекоÑÑекÑнÑй Ñежим адÑеÑаÑии. ILL_ILLTRP ÐекоÑÑекÑÐ½Ð°Ñ Ð»Ð¾Ð²ÑÑка. ILL_PRVOPC ÐÑивилегиÑованнÑй код инÑÑÑÑкÑии. ILL_PRVREG ÐÑивилегиÑованнÑй ÑегиÑÑÑ. ILL_COPROC ÐÑибка ÑопÑоÑеÑÑоÑа. ILL_BADSTK ÐнÑÑÑеннÑÑ Ð¾Ñибка ÑÑека. СледÑÑÑие знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² si_code Ð´Ð»Ñ Ñигнала SIGFPE: FPE_INTDIV Ðеление на Ð½Ð¾Ð»Ñ Ð¿Ñи ÑабоÑе Ñ ÑелÑми ÑиÑлами. FPE_INTOVF ÐеÑеполнение пÑи ÑабоÑе Ñ ÑелÑми ÑиÑлами. FPE_FLTDIV Ðеление на Ð½Ð¾Ð»Ñ Ð¿Ñи ÑабоÑе Ñ ÑиÑлами Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей запÑÑой. FPE_FLTOVF ÐеÑеполнение пÑи ÑабоÑе Ñ ÑиÑлами Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей запÑÑой. FPE_FLTUND ÐеÑваÑка знаÑÐµÐ½Ð¸Ñ Ð¿Ñи ÑабоÑе Ñ ÑиÑлами Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей запÑÑой. FPE_FLTRES ÐеÑоÑнÑй ÑезÑлÑÑÐ°Ñ Ð¿Ñи ÑабоÑе Ñ ÑиÑлами Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей запÑÑой. FPE_FLTINV ÐепÑавилÑÐ½Ð°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð¿Ñи ÑабоÑе Ñ ÑиÑлами Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей запÑÑой. FPE_FLTSUB ÐÐ½Ð´ÐµÐºÑ Ð²Ð½Ðµ ÑазÑеÑеннÑÑ Ð¿Ñеделов пÑи ÑабоÑе Ñ ÑиÑлами Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей запÑÑой. СледÑÑÑие знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² si_code Ð´Ð»Ñ Ñигнала SIGSEGV: SEGV_MAPERR ÐдÑÐµÑ Ð½Ðµ ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð±ÑекÑÑ. SEGV_ACCERR ÐекоÑÑекÑнÑе пÑава на оÑобÑажÑннÑй обÑекÑ. SEGV_BNDERR (наÑÐ¸Ð½Ð°Ñ Ñ Linux 3.19) ÐÑибка пÑовеÑки гÑÐ°Ð½Ð¸Ñ Ð°Ð´ÑеÑа. SEGV_PKUERR (наÑÐ¸Ð½Ð°Ñ Ñ Linux 4.6) ÐÑибка клÑÑа заÑиÑÑ. СледÑÑÑие знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² si_code Ð´Ð»Ñ Ñигнала SIGBUS: BUS_ADRALN ÐекоÑÑекÑное вÑÑавнивание адÑеÑа. BUS_ADRERR ÐеÑÑÑеÑÑвÑÑÑий ÑизиÑеÑкий адÑеÑ. BUS_OBJERR ÐппаÑаÑÐ½Ð°Ñ Ð¾Ñибка, ÑпеÑиÑиÑÐ½Ð°Ñ Ð´Ð»Ñ Ð¾Ð±ÑекÑа. BUS_MCEERR_AR (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6.32) маÑинной пÑовеÑкой ÑÑÑÑанена аппаÑаÑÐ½Ð°Ñ Ð¾Ñибка памÑÑи; ÑÑебÑеÑÑÑ Ð´ÐµÐ¹ÑÑвие BUS_MCEERR_AO (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6.32) в пÑоÑеÑÑе обнаÑÑжена аппаÑаÑÐ½Ð°Ñ Ð¾Ñибка памÑÑи, но не ÑÑÑÑанена; дейÑÑвие не обÑзаÑелÑно СледÑÑÑие знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² si_code Ð´Ð»Ñ Ñигнала SIGTRAP: TRAP_BRKPT ТоÑка оÑÑанова пÑоÑеÑÑа. TRAP_TRACE ÐовÑÑка оÑладки пÑоÑеÑÑа. TRAP_BRANCH (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.4) ÐÑоÑеÑÑ Ð¿Ð¾Ð¹Ð¼Ð°Ð½ в веÑÐ²Ñ Ð»Ð¾Ð²ÑÑки. TRAP_HWBKPT (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.4) ÐппаÑаÑÐ½Ð°Ñ ÑоÑка пÑеÑÑваниÑ/ÑлежениÑ. СледÑÑÑие знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² si_code Ð´Ð»Ñ Ñигнала SIGCHLD: CLD_EXITED ÐоÑеÑний пÑоÑеÑÑ Ð·Ð°Ð²ÐµÑÑил ÑабоÑÑ. CLD_KILLED РабоÑа доÑеÑнего пÑоÑеÑÑа бÑла пÑеÑвана. CLD_DUMPED ÐоÑеÑний пÑоÑеÑÑ Ð·Ð°Ð²ÐµÑÑилÑÑ Ð½ÐµÐºÐ¾ÑÑекÑно. CLD_TRAPPED СÑабоÑала ловÑÑка в оÑлаживаемом доÑеÑнем пÑоÑеÑÑе. CLD_STOPPED ÐоÑеÑний пÑоÑеÑÑ Ð¾ÑÑановлен. CLD_CONTINUED (наÑÐ¸Ð½Ð°Ñ Ñ Linux 2.6.9) ÐÑÑановленнÑй доÑеÑний пÑоÑеÑÑ Ð¿Ñодолжил ÑабоÑÑ. СледÑÑÑие знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² si_code Ð´Ð»Ñ Ñигнала SIGIO/SIGPOLL: POLL_IN ÐÑÑÑ Ð²ÑоднÑе даннÑе. POLL_OUT ÐÑвободилиÑÑ Ð²ÑÑоднÑе бÑÑеÑÑ. POLL_MSG ÐÑÑÑ Ð²Ñодное ÑообÑение. POLL_ERR ÐÑибка ввода-вÑвода. POLL_PRI ÐÑÑÑ Ð²ÑоднÑе даннÑе вÑÑокого пÑиоÑиÑеÑа. POLL_HUP УÑÑÑойÑÑво оÑклÑÑено. СледÑÑÑее знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² si_code Ð´Ð»Ñ Ñигнала SIGSYS: SYS_SECCOMP (наÑÐ¸Ð½Ð°Ñ Ñ Linux 3.5) ÐÐ¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¿Ð¾ пÑÐ°Ð²Ð¸Ð»Ñ ÑилÑÑÑаÑии seccomp(2). ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ ÐÑи ÑÑпеÑном вÑполнении sigaction() возвÑаÑаеÑÑÑ 0; пÑи оÑибке возвÑаÑаеÑÑÑ -1, а в errno ÑодеÑжиÑÑÑ ÐºÐ¾Ð´ оÑибки. ÐШÐÐÐÐ EFAULT act или oldact ÑказÑваÑÑ Ð½Ð° памÑÑÑ, коÑоÑÐ°Ñ Ð½Ðµ ÑвлÑеÑÑÑ ÑаÑÑÑÑ Ð°Ð´ÑеÑного пÑоÑÑÑанÑÑва пÑоÑеÑÑа. EINVAL Указан некоÑÑекÑнÑй Ñигнал. Также оÑибка бÑÐ´ÐµÑ ÑгенеÑиÑована, еÑли пÑоизведена попÑÑка измениÑÑ Ð´ÐµÐ¹ÑÑвие Ð´Ð»Ñ Ñигналов SIGKILL или SIGSTOP, коÑоÑÑе не могÑÑ Ð±ÑÑÑ Ð¿ÐµÑеÑваÑÐµÐ½Ñ Ð¸Ð»Ð¸ игноÑиÑованÑ. СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ POSIX.1-2001, POSIX.1-2008, SVr4. ÐÐÐÐЧÐÐÐЯ ÐоÑомок, ÑозданнÑй Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ fork(2), наÑледÑÐµÑ ÑеакÑÐ¸Ñ Ð½Ð° ÑÐ¸Ð³Ð½Ð°Ð»Ñ Ð¾Ñ Ñвоего ÑодиÑелÑ. ÐÑи execve(2) ÑеакÑÐ¸Ñ Ð½Ð° ÑÐ¸Ð³Ð½Ð°Ð»Ñ ÑÑÑанавливаеÑÑÑ Ð² знаÑение по ÑмолÑаниÑ; ÑеакÑÐ¸Ñ Ð½Ð° игноÑиÑÑемÑе ÑÐ¸Ð³Ð½Ð°Ð»Ñ Ð½Ðµ изменÑеÑÑÑ. Ð ÑооÑвеÑÑÑвии Ñ POSIX поведение пÑоÑеÑÑа поÑле игноÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñигнала SIGFPE, SIGILL или SIGSEGV не опÑеделено, еÑли ÑÑи ÑÐ¸Ð³Ð½Ð°Ð»Ñ Ð½Ðµ бÑли поÑÐ»Ð°Ð½Ñ Ð¿Ñи помоÑи ÑÑнкÑий kill(2) или raise(3). Ðеление Ñелого ÑиÑла на Ð½Ð¾Ð»Ñ Ð¸Ð¼ÐµÐµÑ Ð½ÐµÐ¿ÑедÑказÑемÑй ÑезÑлÑÑаÑ. РнекоÑоÑÑÑ Ð°ÑÑиÑекÑÑÑÐ°Ñ ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñигнала SIGFPE. (Также, деление Ñамого болÑÑого по модÑÐ»Ñ Ð¾ÑÑиÑаÑелÑного ÑиÑла на -1 Ñоже Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº SIGFPE.) ÐгноÑиÑование ÑÑого Ñигнала Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð±ÐµÑконеÑного Ñикла. POSIX.1-1990 запÑеÑÐ°ÐµÑ ÑÑÑÐ°Ð½Ð¾Ð²ÐºÑ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ð´Ð»Ñ Ñигнала SIGCHLD в SIG_IGN. Ð POSIX.1-2001 и новÑÑ Ð²ÐµÑÑиÑÑ ÑÑандаÑÑа допÑÑкаеÑÑÑ ÑÐ°ÐºÐ°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ, поÑÑÐ¾Ð¼Ñ Ð¸Ð³Ð½Ð¾ÑиÑование SIGCHLD можно иÑполÑзоваÑÑ Ð´Ð»Ñ Ð½ÐµÐ´Ð¾Ð¿ÑÑÐµÐ½Ð¸Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð¾Ð¼Ð±Ð¸ (ÑмоÑÑиÑе wait(2)). Тем не менее, поведение BSD и System V по игноÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ SIGCHLD ÑазлиÑаеÑÑÑ, поÑÑÐ¾Ð¼Ñ ÐµÑÑÑ ÑолÑко один пеÑеноÑимÑй ÑпоÑоб ÑбедиÑÑÑÑ, ÑÑо завеÑÑивÑийÑÑ Ð¿Ð¾Ñомок не ÑÑал зомби â поймаÑÑ Ñигнал SIGCHLD и вÑполниÑÑ wait(2) или подобнÑй вÑзов. Ð POSIX.1-1990 Ñказан ÑолÑко SA_NOCLDSTOP. Ð POSIX.1-2001 Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ SA_NOCLDSTOP, SA_NOCLDWAIT, SA_NODEFER, SA_ONSTACK, SA_RESETHAND, SA_RESTART и SA_SIGINFO. ÐÑполÑзование в пÑиложениÑÑ Ð¿Ð¾ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð·Ð½Ð°Ñений в sa_flags Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ñложнее пеÑенеÑÑи на ÑÑаÑÑе ÑеализаÑии UNIX. Флаг SA_RESETHAND ÑовмеÑÑим Ñ Ð¾Ð´Ð½Ð¾Ð¸Ð¼ÑннÑм Ñлагом из SVr4. Флаг SA_NODEFER ÑовмеÑÑим Ñ Ð¾Ð´Ð½Ð¾Ð¸Ð¼ÐµÐ½Ð½Ñм Ñлагом SVr4 в ÑдÑе веÑÑии 1.3.9 и более поздниÑ. Ð ÑÑаÑÑÑ Ð²ÑпÑÑÐºÐ°Ñ ÑдÑа Linux позволÑли пÑинимаÑÑ Ð¸ обÑабаÑÑваÑÑ Ð»ÑбÑе ÑигналÑ, а не ÑолÑко Ñе, обÑабоÑка коÑоÑÑÑ Ñже задана (на деле ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº игноÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑÑановок sa_mask). ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð°Ð´ÑеÑа ÑекÑÑего обÑабоÑÑика Ñигнала можно иÑполÑзоваÑÑ Ð²Ñзов sigaction(), Ñказав NULL в каÑеÑÑве знаÑÐµÐ½Ð¸Ñ Ð²ÑоÑого аÑгÑменÑа. ÐÑÐ¾Ñ Ð²Ñзов можно Ñакже иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¿ÑовеÑки доÑÑÑпноÑÑи ÑÑого Ñипа Ñигнала в конкÑеÑной ÑиÑÑеме, вÑзвав его Ñ Ð²ÑоÑÑм и ÑÑеÑÑим аÑгÑменÑами, ÑавнÑми NULL. Ðевозможно заблокиÑоваÑÑ ÑÐ¸Ð³Ð½Ð°Ð»Ñ SIGKILL или SIGSTOP (Ñказав Ð¸Ñ Ð² sa_mask). ÐопÑÑки ÑÑо ÑделаÑÑ Ð±ÑдÑÑ Ð¿ÑоÑÑо игноÑиÑоваÑÑÑÑ. ÐодÑÐ¾Ð±Ð½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑабоÑе Ñ Ð½Ð°Ð±Ð¾Ñами Ñигналов еÑÑÑ Ð½Ð° ÑÑÑаниÑе sigsetops(3). СпиÑок ÑÑнкÑий безопаÑнÑÑ Ð°ÑинÑÑоннÑÑ Ñигналов, коÑоÑÑе можно не опаÑаÑÑÑ Ð²ÑзÑваÑÑ Ð¸Ð· обÑабоÑÑика Ñигналов, ÑмоÑÑиÑе в signal(7). ÐÑлиÑÐ¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñекой C и ÑдÑом ÐбÑÑÑоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ glibc Ð´Ð»Ñ sigaction() вÑдаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ (EINVAL) пÑи попÑÑÐºÐ°Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¾Ð±ÑабоÑÑики двÑÑ Ñигналов ÑеалÑного вÑемени, коÑоÑÑе иÑполÑзÑÑÑÑÑ Ð²Ð½ÑÑÑи ÑеализаÑии NPTL. ÐодÑобноÑÑи ÑмоÑÑиÑе в nptl(7). ÐеÑвонаÑалÑно, ÑиÑÑемнÑй вÑзов Linux назÑвалÑÑ sigaction(). Ðднако, Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ Ñигналов ÑеалÑного вÑемени в Linux 2.2, 32-биÑнÑй аÑгÑÐ¼ÐµÐ½Ñ sigset_t неизменÑемого ÑазмеÑа, поддеÑживаемÑй ÑÑим ÑиÑÑемнÑм вÑзовом, не мог болÑÑе иÑполÑзоваÑÑÑÑ. Ð ÑезÑлÑÑаÑе бÑл добавлен новÑй ÑиÑÑемнÑй вÑзов rt_sigaction() Ñ ÑвелиÑеннÑм Ñипом sigset_t. У нового ÑиÑÑемного вÑзова поÑвилÑÑ ÑеÑвÑÑÑÑй аÑгÑменÑ, size_t sigsetsize, в коÑоÑом ÑказÑваеÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ (в байÑаÑ) набоÑов Ñигналов act.sa_mask и oldact.sa_mask. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð·Ð½Ð°Ñение ÑÑого аÑгÑменÑа должно бÑÑÑ Ñавно sizeof(sigset_t) (инаÑе Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка EINVAL). ÐбÑÑÑоÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ glibc sigaction() ÑкÑÑÐ²Ð°ÐµÑ ÑÑо и вÑзÑÐ²Ð°ÐµÑ rt_sigaction(), еÑли он еÑÑÑ Ð² ÑдÑе. ÐедокÑменÑиÑованное Ðо поÑÐ²Ð»ÐµÐ½Ð¸Ñ SA_SIGINFO ÑÑÑеÑÑвовала возможноÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑиÑ, иÑполÑзÑÑ sa_handler Ñо вÑоÑÑм паÑамеÑÑом Ñипа struct sigcontext. См. ÑооÑвеÑÑÑвÑÑÑий иÑÑоднÑй код ÑдÑа Linux. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑÐ¾Ñ Ð¼ÐµÑанизм ÑÑÑаÑел. ÐÐФÐÐТЫ Ð ÑдÑÐ°Ñ Ð¿Ð¾ веÑÑÐ¸Ñ 2.6.13 вклÑÑиÑелÑно, Ñказание SA_NODEFER в sa_flags пÑедоÑвÑаÑÐ°ÐµÑ Ð´Ð¾ÑÑÐ°Ð²ÐºÑ Ñигнала не ÑолÑко из маÑкиÑÑемого пÑи вÑполнении обÑабоÑÑика, но Ñакже Ñигналов, ÑказаннÑÑ Ð² sa_mask. ÐÑÐ¾Ñ Ð´ÐµÑÐµÐºÑ Ð¸ÑпÑавлен в ÑдÑе 2.6.14. ÐÐ ÐÐÐРСмоÑÑиÑе в mprotect(2). СÐÐТРÐТРТÐÐÐÐ kill(1), kill(2), killpg(2), pause(2), restart_syscall(2), seccomp(2) sigaltstack(2), signal(2), signalfd(2), sigpending(2), sigprocmask(2), sigreturn(2), sigsuspend(2), wait(2), raise(3), siginterrupt(3), sigqueue(3), sigsetops(3), sigvec(3), core(5), signal(7) Linux 2016-03-15 SIGACTION(2)