sigaction

Autres langues

Langue: ja

Version: 2005-09-15 (openSuse - 09/10/07)

Section: 2 (Appels système)

̾Á°

sigaction - ¥·¥°¥Ê¥ë¤ÎÆ°ºî¤Î³Îǧ¤ÈÊѹ¹

½ñ¼°


#include <signal.h>



int sigaction(int signum, const struct sigaction *act,

              struct sigaction *oldact);

ÀâÌÀ

sigaction() ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢ÆÃÄê¤Î¥·¥°¥Ê¥ë¤ò¼õ¿®¤·¤¿ºÝ¤Î ¥×¥í¥»¥¹¤ÎÆ°ºî¤òÊѹ¹¤¹¤ë¤Î¤Ë»ÈÍѤµ¤ì¤ë¡£

signum ¤Ë¤Ï¡¢ SIGKILL ¤È SIGSTOP °Ê³°¤ÎÍ­¸ú¤Ê¥·¥°¥Ê¥ë¤ò¤É¤ì¤Ç¤â»ØÄê¤Ç¤­¤ë¡£

act ¤¬ NULL °Ê³°¤Ç¤¢¤ì¤Ð¡¢¥·¥°¥Ê¥ë signum ¤Î¿·¤·¤¤Æ°ºî (action) ¤È¤·¤Æ 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 Í×ÁǤ˴ؤ¹¤ëµ¬Äê¤Ï¤Ê¤¤¡£

sa_handler ¤Ï signum ¤ËÂбþ¤¹¤ëÆ°ºî¤ò»ØÄꤹ¤ë¤â¤Î¤Ç¡¢ ¥Ç¥Õ¥©¥ë¥È¤ÎÆ°ºî¤ò¹Ô¤¦ SIG_DFL¡¢ ¤½¤Î¥·¥°¥Ê¥ë¤ò̵»ë¤¹¤ë SIG_IGN¡¢ ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤¬ÀßÄê¤Ç¤­¤ë¡£ ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é´Ø¿ô¤Î°ú¤­¿ô¤Ï°ì¤Ä¤Ç¤¢¤ê¡¢¥·¥°¥Ê¥ëÈֹ椬°ú¤­¿ô¤È¤·¤Æ ÅϤµ¤ì¤ë¡£

sa_flags ¤Ë SA_SIGINFO ¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¡¢ (sa_handler ¤Ç¤Ï¤Ê¤¯) sa_sigaction ¤Ë¤è¤ê signum ¤ËÂбþ¤¹¤ë¥·¥°¥Ê¥ë¥Ï¥ó¥É¥ë´Ø¿ô¤¬»ØÄꤵ¤ì¤ë¡£ »ØÄꤵ¤ì¤ë´Ø¿ô¤Ï¡¢ºÇ½é¤Î°ú¤­¿ô¤È¤·¤Æ¥·¥°¥Ê¥ëÈÖ¹æ¤ò¡¢ ÆóÈÖÌܤΰú¤­¿ô¤È¤·¤Æ siginfo_t ¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò¡¢»°ÈÖÌܤΰú¤­¿ô¤È¤·¤Æ (void * ¤Ë¥­¥ã¥¹¥È¤·¤¿) ucontext_t ¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò¼õ¤±¤È¤ë¡£

sa_mask ¤Ï¡¢¥·¥°¥Ê¥ë¡¦¥Ï¥ó¥É¥é¼Â¹ÔÃæ¤Ë¶Ø»ß (block) ¤¹¤ë¥·¥°¥Ê¥ë¤Î¥Þ¥¹¥¯¤òɽ¤¹¡£ ¤µ¤é¤Ë¡¢ SA_NODEFER ¥Õ¥é¥°¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢¥Ï¥ó¥É¥é¤òµ¯Æ°¤¹¤ë¤­¤Ã¤«¤±¤È¤Ê¤ë ¥·¥°¥Ê¥ë¤Ë¤â sa_mask ¤¬Å¬ÍѤµ¤ì¤ë¡£

sa_flags ¤Ï¥·¥°¥Ê¥ë¡¦¥Ï¥ó¥É¥é¤ÎÆ°ºî¤òÊѹ¹¤¹¤ë¤¿¤á¤Î¥Õ¥é¥°¤Î½¸¹ç¤ò»ØÄꤹ¤ë¡£ sa_flags ¤Ë¤Ï¡¢°Ê²¼¤Ë¼¨¤¹¥Õ¥é¥°¤Î (0¸Ä°Ê¾å¤Î) ÏÀÍýϤò¤È¤Ã¤¿¤â¤Î¤ò»ØÄꤹ¤ë¡£

SA_NOCLDSTOP
signum ¤¬ SIGCHLD ¤Î¾ì¹ç¡¢ »Ò¥×¥í¥»¥¹¤¬Ää»ß¤·¤¿¤ê (»Ò¥×¥í¥»¥¹¤¬ SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU ¤ò¼õ¤±¤¿¤È¤­) ºÆ³«¤·¤¿¤ê (»Ò¥×¥í¥»¥¹¤¬ SIGCONT ¤ò¼õ¤±¤¿¤È¤­) ¤·¤¿¤È¤­¤Ë SIGCHLD ¤ÎÄÌÃΤò¼õ¤±¤Ê¤¤¡£
SA_NOCLDWAIT
(Linux 2.6 °Ê¹ß) signum ¤¬ SIGCHLD ¤Î¾ì¹ç¡¢»Ò¥×¥í¥»¥¹¤¬½ªÎ»¤·¤¿¤È¤­¤Ë »Ò¥×¥í¥»¥¹¤ò¥¾¥ó¥Ó¥×¥í¥»¥¹¤ËÊѲ½¤µ¤»¤Ê¤¤ (waitpid(2) ¤â»²¾È)¡£
SA_RESETHAND
¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤¬¸Æ¤Ð¤ì¤ëÅ٤ˡ¢¥·¥°¥Ê¥ë¤ÎÆ°ºî¤ò¥Ç¥Õ¥©¥ë¥È¤ËÌ᤹¡£ SA_ONESHOT ¤Ï¤³¤Î¥Õ¥é¥°¤ÈƱ¤¸°ÕÌ£¤À¤¬¡¢Çѻߤµ¤ì¤Æ¤ª¤ê¡¢Èóɸ½à¤Ç¤¢¤ë¡£
SA_ONSTACK
sigaltstack(2) ¤ÇÄ󶡤µ¤ì¤ëÊ̤Υ·¥°¥Ê¥ë¡¦¥¹¥¿¥Ã¥¯¤Ç¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ò¸Æ¤Ó½Ð¤¹¡£ Ê̤Υ·¥°¥Ê¥ë¡¦¥¹¥¿¥Ã¥¯¤¬ÍøÍѲÄǽ¤Ç¤Ê¤±¤ì¤Ð¡¢¥Ç¥Õ¥©¥ë¥È¤Î¥¹¥¿¥Ã¥¯¤¬ »ÈÍѤµ¤ì¤ë¡£
SA_RESTART
¤¤¤¯¤Ä¤«¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò¥·¥°¥Ê¥ë¤ÎÄÌÃΤÎÁ°¸å¤ÇºÆ³«¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Æ¡¢ BSD ¥·¥°¥Ê¥ëÊý¼° (semantics) ¤È¸ß´¹À­¤Î¤¢¤ëÆ°ºî¤òÄ󶡤¹¤ë¡£
SA_NODEFER
¤½¤ì¼«¿È¤Î¥·¥°¥Ê¥ë¡¦¥Ï¥ó¥É¥é¡¼¤ÎÆâÉô¤Ë¤¤¤ë»þ¤Ç¤â ¤½¤Î¥·¥°¥Ê¥ë¤ò¥Þ¥¹¥¯¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¡£ SA_NOMASK ¤Ï¤³¤Î¥Õ¥é¥°¤ÈƱ¤¸°ÕÌ£¤À¤¬¡¢Çѻߤµ¤ì¤Æ¤ª¤ê¡¢Èóɸ½à¤Ç¤¢¤ë¡£
SA_SIGINFO
¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Ï°ì¤Ä¤Ç¤Ï¤Ê¤¯¡¢»°¤Ä¤Î°ú¤­¿ô¤ò»ý¤Ä¡£¤³¤Î¾ì¹ç¤Ï sa_handler ¤Î¤«¤ï¤ê¤Ë sa_sigaction ¤òÀßÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤ (sa_sigaction ¥Õ¥£¡¼¥ë¥É¤Ï Linux 2.1.86 ¤ÇÄɲ䵤줿)¡£

sa_sigaction ¤Î¥Ñ¥é¥á¡¼¥¿ siginfo_t ¤Ï°Ê²¼¤ÎÍ×ÁǤò»ý¤Ä¹½Â¤ÂΤǤ¢¤ë:


siginfo_t {

    int      si_signo;    /* Signal number */

    int      si_errno;    /* An errno value */

    int      si_code;     /* Signal code */

    pid_t    si_pid;      /* Sending process ID */

    uid_t    si_uid;      /* Real user ID of sending process */

    int      si_status;   /* Exit value or signal */

    clock_t  si_utime;    /* User time consumed */

    clock_t  si_stime;    /* System time consumed */

    sigval_t si_value;    /* Signal value */

    int      si_int;      /* POSIX.1b signal */

    void    *si_ptr;      /* POSIX.1b signal */

    void    *si_addr;     /* Memory location which caused fault */

    int      si_band;     /* Band event */

    int      si_fd;       /* File descriptor */

}

si_signo, si_errno, si_code ¤ÏÁ´¤Æ¤Î¥·¥°¥Ê¥ë¤ËÂФ·¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤ë (si_signo ¤Ï Linux ¤Ç¤Ï»ÈÍѤµ¤ì¤Ê¤¤)¡£ ¹½Â¤ÂΤλĤê¤ÎÉôʬ¤Ï¡¢¶¦ÍÑÂÎ (union) ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤«¤â¤·¤ì¤Ê¤¤¡£ ¤½¤Î¾ì¹ç¤Ï³ºÅö¤¹¤ë¥·¥°¥Ê¥ë¤Ë¤ª¤¤¤Æ°ÕÌ£¤Î¤¢¤ë¥Õ¥£¡¼¥ë¥É¤Î¤ß¤òÆɤ߹þ¤à ¤³¤È¤¬¤Ç¤­¤ë¡£

*
POSIX.1b ¥·¥°¥Ê¥ë¤È SIGCHLD ¤Ï si_pid ¤È si_uid ¤òÀßÄꤹ¤ë¡£ .IP* SIGCHLD ¤Ï¤µ¤é¤Ë si_status, si_utime, si_stime ¤âÀßÄꤹ¤ë¡£
*
si_int ¤È si_ptr ¤Ï POSIX.1b ¥·¥°¥Ê¥ë¤ÎÁ÷¿®¼Ô¤Ë¤è¤Ã¤Æ»ØÄꤵ¤ì¤ë¡£ ¾ÜºÙ¤Ï sigqueue(2) ¤ò»²¾È¤Î¤³¤È¡£
*
SIGILL, SIGFPE, SIGSEGV, SIGBUS ¤Ï si_addr ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤¿¥¢¥É¥ì¥¹¤òÀßÄꤹ¤ë¡£ SIGPOLL ¤Ï si_band ¤È si_fd ¤òÀßÄꤹ¤ë¡£

si_code ¤Ï¡¢¤½¤Î¥·¥°¥Ê¥ë¤¬Á÷¿®¤µ¤ì¤¿Íýͳ¤ò¼¨¤¹¡£¤³¤ì¤ÏÃͤǤ¢¤ê¥Ó¥Ã¥È¥Þ¥¹¥¯¤Ç¤Ï¤Ê¤¤¡£ °Ê²¼¤Îɽ¤Ë¤Ï¤É¤Î¥·¥°¥Ê¥ë¤Î¾ì¹ç¤Ç¤â»ÈÍѤǤ­¤ëÃͤòµ­ºÜ¤·¤Æ¤¤¤ë:

si_code
Value Signal origin
SI_USER kill(), sigsend(2), or raise(3)
SI_KERNEL The kernel
SI_QUEUE sigqueue(2)
SI_TIMER POSIX timer expired
SI_MESGQ POSIX message queue state changed (since Linux 2.6.6)
SI_ASYNCIO AIO completed
SI_SIGIO queued SIGIO
SI_TKILL tkill(2) or tgkill(2) (since Linux 2.4.19)
SIGILL
ILL_ILLOPC illegal opcode
ILL_ILLOPN illegal operand
ILL_ILLADR illegal addressing mode
ILL_ILLTRP illegal trap
ILL_PRVOPC privileged opcode
ILL_PRVREG privileged register
ILL_COPROC coprocessor error
ILL_BADSTK internal stack error
SIGFPE
FPE_INTDIV integer divide by zero
FPE_INTOVF integer overflow
FPE_FLTDIV floating point divide by zero
FPE_FLTOVF floating point overflow
FPE_FLTUND floating point underflow
FPE_FLTRES floating point inexact result
FPE_FLTINV floating point invalid operation
FPE_FLTSUB subscript out of range
SIGSEGV
SEGV_MAPERR address not mapped to object
SEGV_ACCERR invalid permissions for mapped object
SIGBUS
BUS_ADRALN invalid address alignment
BUS_ADRERR non-existent physical address
BUS_OBJERR object specific hardware error
SIGTRAP
TRAP_BRKPT process breakpoint
TRAP_TRACE process trace trap
SIGCHLD
CLD_EXITED child has exited
CLD_KILLED child was killed
CLD_DUMPED child terminated abnormally
CLD_TRAPPED traced child has trapped
CLD_STOPPED child has stopped
CLD_CONTINUED stopped child has continued (since Linux 2.6.9)
SIGPOLL
POLL_IN data input available
POLL_OUT output buffers available
POLL_MSG input message available
POLL_ERR i/o error
POLL_PRI high priority input available
POLL_HUP device disconnected

ÊÖ¤êÃÍ

sigaction() ¤ÏÀ®¸ù¤¹¤ì¤Ð 0 ¤òÊÖ¤·¡¢¥¨¥é¡¼¤Ê¤é¤Ð -1 ¤òÊÖ¤¹¡£

¥¨¥é¡¼

EFAULT
act ¤« oldact ¤¬»Ø¤·¤Æ¤¤¤ë¥á¥â¥ê¤¬Àµ¤·¤¤¥×¥í¥»¥¹¤Î¥¢¥É¥ì¥¹¶õ´Ö¤Ë¤Ê¤¤¡£
EINVAL
̵¸ú¤Ê¥·¥°¥Ê¥ë¤¬»ØÄꤵ¤ì¤¿¡£Êä­ (catch) ¤·¤¿¤ê̵»ë¤·¤¿¤ê¤Ç¤­¤Ê¤¤ ¥·¥°¥Ê¥ë¤Ç¤¢¤ë SIGKILL ¤ä SIGSTOP ¤ËÂФ¹¤ëÆ°ºî¤òÊѹ¹¤·¤è¤¦¤È¤·¤¿¾ì¹ç¤Ë¤âȯÀ¸¤¹¤ë¡£

½àµò

POSIX.1-2001, SVr4.

Ãí°Õ

POSIX ¤Ç¤Ï¡¢ kill(2) ¤ä raise(3) ´Ø¿ô¤ÇÀ¸À®¤Ç¤­¤Ê¤¤¥·¥°¥Ê¥ë SIGFPE, SIGILL, SIGSEGV ¤ò̵»ë (ignore) ¤·¤¿¾ì¹ç¡¢¤½¤Î¸å¤ÎÆ°ºî¤Ï̤ÄêµÁ¤Ç¤¢¤ë¡£ ¥¼¥í¤Ë¤è¤ëÀ°¿ô³ä¤ê»»¤Î·ë²Ì¤Ï̤ÄêµÁ¤È¤Ê¤ë¡£ ¥¢¡¼¥­¥Æ¥¯¥Á¥ã¡¼¤Ë¤è¤Ã¤Æ¤Ï¡¢¤³¤Î¤È¤­ SIGFPE ¥·¥°¥Ê¥ë¤¬À¸À®¤µ¤ì¤ë¡£ (ƱÍͤËÉé¤ÎºÇÂçÀ°¿ô¤ò -1 ¤Ç³ä¤ë¤È SIGFPE ¤¬À¸À®¤µ¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤) ¤³¤Î¥·¥°¥Ê¥ë¤ò̵»ë¤¹¤ë¤È̵¸Â¥ë¡¼¥×¤Ë´Ù¤ë¤«¤â¤·¤ì¤Ê¤¤¡£

POSIX.1-1990 ¤Ç¤Ï SIGCHLD ¤Ë SIG_IGN ¤òÀßÄꤹ¤ë¤³¤È¤òǧ¤á¤Æ¤¤¤Ê¤¤¡£ POSIX.1-2001 ¤Ç¤Ïǧ¤á¤é¤ì¤Æ¤ª¤ê¡¢ SIGCHLD ¤ò̵»ë¤¹¤ë¤³¤È¤Ç¥¾¥ó¥Ó¥×¥í¥»¥¹¤ÎÀ¸À®¤òËɻߤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë (wait(2) ¤ò»²¾È)¡£ ¤µ¤é¤Ë¡¢BSD ¤È SystemV ¤Ç¤Ï SIGCHLD ¤ò̵»ë¤·¤¿ºÝ¤ÎÆ°ºî¤¬°Û¤Ê¤Ã¤Æ¤¤¤ë¡£ ¤½¤Î¤¿¤á¡¢´°Á´¤Ë°Ü¿¢À­¤¬¤¢¤ëÊýË¡¤Ç¡¢½ªÎ»¤·¤¿»Ò¥×¥í¥»¥¹¤¬¥¾¥ó¥Ó¤Ë¤Ê¤é¤Ê¤¤¤³¤È ¤òÊݾڤ¹¤ë¤Ë¤Ï¡¢ SIGCHLD ¥·¥°¥Ê¥ë¤òÊä­¤·¡¢ wait(2) ¤Ê¤É¤ò¼Â¹Ô¤¹¤ë¤·¤«¤Ê¤¤¡£

POSIX.1-1990 ¤Î»ÅÍÍ¤Ç¤Ï SA_NOCLDSTOP ¤Î¤ß¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£ POSIX.1-2001 ¤Ç¤Ï SA_NOCLDWAIT, SA_RESETHAND, SA_NODEFER, SA_SIGINFO ¤¬Äɲ䵤줿¡£ Unix ¤Î¸Å¤¤¼ÂÁõ¤ÇÆ°¤«¤¹¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¡¢ ¾¤Î sa_flags ¥Õ¥é¥°¤ò»ÈÍѤ¹¤ë¤È°Ü¿¢À­¤¬²¼¤¬¤ë¡£

SA_SIGINFO ¥Õ¥é¥°¤Ï Linux 2.2 ¤«¤é¥µ¥Ý¡¼¥È¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¡£

SA_RESETHAND ¥Õ¥é¥°¤Ï SVr4 ¤ÎƱ¤¸Ì¾Á°¤Î¥Õ¥é¥°¤È¸ß´¹À­¤¬¤¢¤ë¡£

SA_NODEFER ¥Õ¥é¥°¤Ï 1.3.9 °Ê¹ß¤Î¥«¡¼¥Í¥ë¤Ç¤ÏƱ¤¸Ì¾Á°¤Î SVr4 ¤Î¥Õ¥é¥°¤È¸ß´¹À­¤¬¤¢¤ë¡£ ¤¾¤ì°ÊÁ°¤Î Linux ¥«¡¼¥Í¥ë¤Î¼ÂÁõ¤Ç¤Ï¡¢¤³¤Î¥Õ¥é¥°¤òÀßÄꤷ¤Æ¤¤¤ë¥·¥°¥Ê¥ë ¤À¤±¤Ç¤Ê¤¯¡¢¤É¤Î¥·¥°¥Ê¥ë¤Ç¤â¼õ¤±¤ë¤³¤È¤òµö¤·¤Æ¤¤¤¿ (¼ÂºÝ¤Ë¤Ï sa_mask ¤ÎÀßÄê¤Ë¤è¤ê̵¸ú¤Ë¤Ç¤­¤ë)¡£

sigaction() ¤ÎÆóÈÖÌܤΰú¤­¿ô¤Ë NULL ¤ò»ØÄꤷ¤Æ¸Æ¤Ó½Ð¤¹¤È¡¢¸½ºß¤Î¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ò³Îǧ¤¹¤ë ¤³¤È¤¬¤Ç¤­¤ë¡£¤Þ¤¿¡¢ÆóÈÖÌܤȻ°ÈÖÌܤΰú¤­¿ô¤ò NULL ¤Ë¤Æ¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¡¢ »ØÄꤵ¤ì¤¿¥·¥°¥Ê¥ë¤¬¸½ºß¤Î¥Þ¥·¥ó¤Ç»È¤¨¤ë¤«¤É¤¦¤«¥Á¥§¥Ã¥¯¤Ç¤­¤ë¡£

SIGKILL ¤ä SIGSTOP ¤ò (sa_mask ¤Ë»ØÄꤷ¤Æ) ¶Ø»ß¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£ ¶Ø»ß¤·¤è¤¦¤È¤·¤Æ¤âÌۤäÆ̵»ë¤µ¤ì¤ë¡£

¥·¥°¥Ê¥ë½¸¹ç¤ÎÁàºî¤Ë´Ø¤¹¤ë¾ÜºÙ¤Ï sigsetops(3) ¤ò»²¾È¤¹¤ë¤³¤È¡£

¥·¥°¥Ê¥ë¥Ï¥ó¥É¥éÆ⤫¤é°ÂÁ´¤Ë¸Æ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤­¤ë¡¢ async-signal-safe functions (ÈóƱ´ü¥·¥ó¥°¥ë¤Ç°ÂÁ´¤Ê´Ø¿ô) ¤Î ¥ê¥¹¥È¤Ë¤Ä¤¤¤Æ¤Ï signal(7) ¤ò»²¾È¡£

Èó¸ø¼°

SA_SIGINFO ¤¬Æ³Æþ¤µ¤ì¤ëÁ°¤Ï¡¢ struct sigcontext ·¿¤ÎÆóÈÖÌܤΰú¤­¿ô¤È°ì½ï¤Ë sa_handler ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢ ¤¤¤¯¤Ä¤«¤ÎÄɲäξðÊó¤òÆþ¼ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤¿¡£ ¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï¥«¡¼¥Í¥ë¥½¡¼¥¹¤Î´ØÏ¢Éôʬ¤ò¸«¤Æ¤Û¤·¤¤¡£ ¸½ºß¤Ï¤³¤Î»ÈÍÑË¡¤ÏÇѻߤµ¤ì¤Æ¤¤¤ë¡£

¥Ð¥°

2.6.13 °ÊÁ°¤Î¥«¡¼¥Í¥ë¤Ç¤Ï¡¢ sa_flags ¤Ë SA_NODEFER ¤ò»ØÄꤷ¤¿¾ì¹ç¡¢ ¥Ï¥ó¥É¥é¤¬¼Â¹ÔÃæ¤ËÇÛÁ÷¤µ¤ì¤¿¥·¥°¥Ê¥ë¼«¿È¤¬¥Þ¥¹¥¯¤µ¤ì¤Ê¤¯¤Ê¤ë¤À¤±¤Ç¤Ê¤¯¡¢ sa_mask ¤Ë»ØÄꤵ¤ì¤¿¥·¥°¥Ê¥ë¤â¥Þ¥¹¥¯¤µ¤ì¤Ê¤¯¤Ê¤ë¡£ ¤³¤Î¥Ð¥°¤Ï¡¢¥«¡¼¥Í¥ë 2.6.14 ¤Ç½¤Àµ¤µ¤ì¤¿¡£

Îã

mprotect(2) »²¾È¡£

´ØÏ¢¹àÌÜ

kill(1), kill(2), pause(2), sigaltstack(2), signal(2), sigpending(2), sigprocmask(2), sigqueue(2), sigsuspend(2), wait(2), killpg(3), raise(3), siginterrupt(3), sigsetops(3), sigvec(3), core(5), signal(7)