sigaction

SIGACTION(2)               Linux Programmer's Manual              SIGACTION(2)



ì´ë¦
       sigaction, sigprocmask, sigpending, sigsuspend - POSIX ìê·¸ë ì²ë¦¬ í¨ì

ì¬ì©ë²
       #include <signal.h>


       int sigaction(int signum, const struct sigaction *act, struct sigaction
       *oldact);

       int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

       int sigpending(sigset_t *set);

       int sigsuspend(const sigset_t *mask);

ì¤ëª
       sigaction ìì¤í í¸ì¶ì í¹ì  ìê·¸ëì´ ìì ëìì ë, íë¡ì¸ì¤ê° ì·¨í  ì¡ìì
       ë³ê²½íëë° ì¬ì©ëë¤.

       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);
              }

       ìí¤íì³ì ë°ë¼ ê³µì©ì²´ë¡ ëì´ ì기ë íë¯ë¡, sa_handler ì sa_sigaction ì
       모ë ì§ì íì§ ë§ë¼.

       sa_restorer ììë ì°ì´ì§ ìì¼ë©°, ì¬ì©ëì´ìë ìëë¤.  POSIXë sa_restorer
       ìì를 ê°ì§ ìëë¤.

       sa_handler ë signum ìê·¸ëì´ ì¤ë©´ ì¤íëë ì¡ìì ëªìíë©°, ëí´í¸ ì¡ìì
       ì·¨íë¼ë SIG_DFL , ìê·¸ëì 무ìíë¼ë SIG_IGN , ìê·¸ëì ì²ë¦¬íë í¹ì  í¨ìì ëí
       í¬ì¸í° ì¤ì íëê° ë  ì ìë¤.  ì¸ë²ì§¸ì ê²½ì° ìê·¸ë ì²ë¦¬ í¨ìë ìê·¸ë
       ë²í¸ë§ì ì ì¼í ì¸ìë¡ ê°ëë¤.

       sa_sigaction ëí signum ìê·¸ëê³¼ ì°ê²°ë ì¡ìì ëªìíë¤. ì²ë¦¬ í¨ìë ìê·¸ë
       ë²í¸ë¥¼ 첫ë²ì§¸ ì¸ìë¡, siginfo_t ì ëí í¬ì¸í°ë¥¼ ëë²ì§¸ ì¸ìë¡,
       ê·¸ë¦¬ê³  voidí í¬ì¸í°ë¡ ìºì¤í¸ë ucontext_t ì ëí í¬ì¸í°ë¥¼ ì¸ë²ì§¸
       ì¸ìë¡ ê°ëë¤.

       sa_mask ë ìê·¸ë í¸ë¤ë¬ì ì¤í ëì ë¸ë¡íëì´ì¼ íë ìê·¸ëì ë§ì¤í¬ë¥¼ ì ê³µíë¤.
       ëí, SA_NODEFER ëë SA_NOMASK ì´ ì¬ì©ëì§ ìì¼ë©´, í¸ë¤ë¬ë¥¼ ìëìì¼°ë ê·¸
       ìê·¸ëë ë¸ë¡íëë¤.

       sa_flags ë ìê·¸ë ì²ë¦¬ íë¡ì¸ì¤ì íì를 ë³ê²½ìí¤ë ì¼ë ¨ì íëê·¸ë¤ì ëªìíë¤.
       ì´ë bitwise í¹ì íëê·¸ë ìë íëê·¸ ë¤ì 0ê° ì´ìì OR ë¹í¸ ì°ì°ì¼ë¡
       ë§ë¤ì´ì§ë¤.

              SA_NOCLDSTOP
                     signum ê° SIGCHLD ì´ë©´ ìì íë¡ì¸ì¤ê° ì¤ì§ëì´ë íµì§ë¥¼
                     ë°ì§ ìëë¤.  (ì¦, ìì íë¡ì¸ì¤ë¤ì´ SIGSTOP, SIGTSTP, SIGTTIN
                     , SIGTTOU ì¤ íë를 ìì í  ë)

              SA_ONESHOT ëë SA_RESETHAND
                     ìê·¸ë ì²ë¦¬ê¸°ê° í¸ì¶ëì´ íë² ì¤íë í, ìê·¸ë ì¡ìì ìëì ëí´í¸
                     ì¡ìì¼ë¡ ëëë ¤ ëëë¤.  (ì´ë signal(2) í¸ì¶ì ëí 기본
                     íìì´ë¤.)

              SA_RESTART
                     ì¼ë¶ ìì¤í í¸ì¶ë¤ì´ ìê·¸ëì íµí´ ì¬ììí  ì ìëë¡ í¨ì¼ë¡ì BSD
                     ìê·¸ëê³¼ì í¸íì±ì ì ê³µíë¤.

              SA_NOMASK or SA_NODEFER
                     ì´ë¤ ìê·¸ë ì²ë¦¬ê¸°ì ëìëì ê·¸ ìê·¸ë ìì ì ë§ì§ ìëë¤.

              SA_SIGINFO
                     ìê·¸ë ì²ë¦¬ê¸°ê° í ê°ê° ìë 3ê°ì ì¸ì를 ì·¨íë¤. ì´ ê²½ì°,
                     sa_handler ëì ì sa_sigaction ì´ ì¤ì ëì´ì¼ íë¤.
                     (sa_sigaction íëë 리ëì¤ 2.1.86ìì ì¶ê°ëìë¤.)

       sa_sigaction ì siginfo_t ë³ìë ë¤ìì ììë¤ì ê°ë 구조체(struct)ì´ë¤.

              siginfo_t {
                  int      si_signo;  /* ìê·¸ë ëë² */
                  int      si_errno;  /* errno ê° */
                  int      si_code;   /* ìê·¸ë ì½ë */
                  pid_t    si_pid;    /* íë¡ì¸ì¤ ID ë³´ë´ê¸° */
                  uid_t    si_uid;    /* íë¡ì¸ì¤ë¥¼ ì ì¡íë ì¤ì  ì¬ì©ì ID */
                  int      si_status; /* Exit ê° ëë ìê·¸ë */
                  clock_t  si_utime;  /* ì모ë ì¬ì©ì ìê° */
                  clock_t  si_stime;  /* ì모ë ìì¤í ìê° */
                  sigval_t si_value;  /* ìê·¸ë ê° */
                  int      si_int;    /* POSIX.1b ìê·¸ë */
                  void *   si_ptr;    /* POSIX.1b ìê·¸ë */
                  void *   si_addr;   /* ì¤í¨ë¥¼ ì´ëí ë©ëª¨ë¦¬ ìì¹ */
                  int      si_band;   /* ë°´ë ì´ë²¤í¸ */
                  int      si_fd;     /* íì¼ ê¸°ì ì */
              }

       si_signo, si_errno ê·¸ë¦¬ê³  si_code ë ëª¨ë  ìê·¸ëì ëí´ ì ìëìë¤.
       kill(2), POSIX.1b ìê·¸ëê³¼ SIGCHLDì si_pid ê³¼ si_uid ì ì±ì´ë¤.
       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 ë ì ìê·¸ëì´ ë³´ë´ì¡ëì§ì ëí´ ì§ìíë¤. ì´ë bitmaskê° ìë ê°ì´ë¤.
       ëì¬ ì ìë ëª¨ë  ìê·¸ë ê°ì ì´ íì´ë¸ì ëì´ëì´ ìë¤.

       ┌────────────────────────────────────┐
       │              si_code               │
       ├───────────┬────────────────────────┤
       │Value      │ Signal origin          │
       ├───────────┼────────────────────────┤
       │SI_USER    │ kill, sigsend or raise │
       ├───────────┼────────────────────────┤
       │SI_KERNEL  │ The kernel             │
       ├───────────┼────────────────────────┤
       │SI_QUEUE   │ sigqueue               │
       ├───────────┼────────────────────────┤
       │SI_TIMER   │ timer expired          │
       ├───────────┼────────────────────────┤
       │SI_MESGQ   │ mesq state changed     │
       ├───────────┼────────────────────────┤
       │SI_ASYNCIO │ AIO completed          │
       ├───────────┼────────────────────────┤
       │SI_SIGIO   │ queued SIGIO           │
       └───────────┴────────────────────────┘
       ┌─────────────────────────────────────┐
       │               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-existant 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 │
       └──────────────┴─────────────────────────────┘
       ┌─────────────────────────────────────────┐
       │                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           │
       └─────────┴───────────────────────────────┘
       sigprocmask í¸ì¶ì íì¬ ë¸ë¡íë ìê·¸ëë¤ì ë³ê²½ìí¤ëë° ì¬ì©ëë¤. í¸ì¶ì ì§ì ë
       how ê°ì ë°ë¼ ë¤ë¥´ê² ëìíë¤.

              SIG_BLOCK
                     set ì¸ìê° ì§ì í ìê·¸ë ì§í©ì´ ë¸ë¡ìí¬ ìê·¸ë ì§í©ì ëí´ì§ë¤.

              SIG_UNBLOCK
                     set ì í¬í¨ë ìê·¸ëë¤ì´ ë¸ë¡ìí¬ ìê·¸ëë¤ì ì§í©ìì ìì ëë¤.
                     ë¸ë¡íê³  ìì§ ìì ìê·¸ëì ìì íë ¤ í´ë ê´ì°®ë¤.

              SIG_SETMASK
                     ë¸ë¡íí  ìê·¸ë ì§í©ì set ì¼ë¡ ì¤ì íë¤.

       oldset ì´ nullì´ ìë ë, 기존ì ë§ì¤í¬ ìê·¸ë ì§í©ì oldset ì ì ì¥ëë¤.

       sigpending í¸ì¶ì ë¸ë¡íì ë§í 기ë¤ë¦¬ê³  ìë ìê·¸ëì ì´í´ë³¼ ì ìëë¡
       í´ì¤ë¤.  기ë¤ë¦¬ë ìê·¸ëë¤ì ìê·¸ë ë§ì¤í¬ë set ë´ì ì ì¥ëë¤.

       sigsuspend í¸ì¶ì íë¡ì¸ì¤ê° ë§ê³  ìë ìê·¸ë ë§ì¤í¬ë¥¼ ì§ì í mask ë¡ ì ì
       ëì²´íê³ , ë¤ì ìê·¸ëì´ ìì ë  ëê¹ì§ íë¡ì¸ì¤ë¥¼ ì¤ì§ìí¨ë¤.

ë°íê°
       sigaction , sigprocmask , sigpending ë ì±ê³µíë©´ 0ì ì¤í¨íë©´ -1ì
       리í´íë¤.  sigsuspend íì -1ì 리í´íë¤.  ë³´íµ ìë¬ EINTR ê³¼ í¨ê».


ìë¬
       EINVAL ì§ì í ìê·¸ëì´ ë¶ì ì íë¤. í¹ì ë°ì ì ìë SIGKILL ëë SIGSTOP ì ëí
              ì¡ìì ë³ê²½íë ¤ê³  íë¤.

       EFAULT act, oldact, set ëë oldset ì´ íë¡ì¸ì¤ì ë©ëª¨ë¦¬ ììì´ ìë ê³³ì
              ê°ë¦¬í¤ê³  ìë¤.

       EINTR  ìì¤í í¸ì¶ì´ ì¸í°ë½í¸ëìë¤.

주ì
       sigprocmask í¸ì¶ë¡ SIGKILL ëë SIGSTOP ì ë¸ë¡íí  ì ìë¤. ì´ë° ëªë ¹ì
       무ìëë¤.

       POSIXì ë°ë¥´ë©´, íë¡ì¸ì¤ê° kill() ëë raise() í¨ìê° ë§ë¤ì´ ë¸ ê²ì´ ìë
       GFPE, SIGILL, í¹ì SIGSEGV를 무ìí ì´íì íë¡ì¸ì¤ì ëìì ì ìëì§ ìëë¤.
       ì ì를 0ì¼ë¡ ëë ê²°ê³¼ ëí ì ìëì§ ìëë¤.  ì¼ë¶ ìí¤íì³ìì  0ì¼ë¡ ëë기ê°
       SIGFPE ìê·¸ëì ë§ë¤ì´ ë¼ ê²ì´ë¤.  (ëí ê°ì¥ í° ìì ì ì를 -1ë¡ ëëì´ë
       SIGFPE를 ìì±í  ì ìë¤.)  ì´ ìê·¸ëì 무ìíë©´ 무í 루í를 ì´ëí  ì ìë¤.

       POSIX ì¤íì ì¤ì§ SA_NOCLDSTOP ë§ì ì ìíë¤ .  ë¤ë¥¸ sa_flags ì ì¬ì©ì ì´ìì´
       ë¶ê°ë¥íë¤.

       SA_RESETHAND íëê·¸ë ëì¼í ì´ë¦ì SVr4 íëê·¸ì í¸íê°ë¥íë¤.

       SA_NODEFER íëê·¸ë 커ë 1.3.9ê³¼ ìë¡ì´ ë²ì íìì ëì¼í ì´ë¦ì SVr4 íëê·¸ì
       í¸íê°ë¥íë¤.

       SVr4 í¸íì±ì ìí SA_RESETHAND ì SA_NODEFER ì´ë¦ë¤ì ì¤ì§ ë¼ì´ë¸ë¬ë¦¬ ë²ì
       3.0.9 ê·¸ë¦¬ê³  ê·¸ ì´íì ë²ì ììë§ ì¡´ì¬íë¤.

       SA_SIGINFO íëê·¸ë POSIX.1bì ìí´ìë§ ëªìëë¤. ì´ì ëí ì§ìì 리ëì¤ 2.2ì
       ì¶ê°ëìë¤.

       sigaction íì¬ ìê·¸ë ì²ë¦¬ê¸°ì 쿼리를 í기 ìí´ ë ëë²ì§¸ ì¸ìë¡ í¸ì¶ë
       ì ìë¤. ì´ë¥¼ ë ëë²ì§¸ ê·¸ë¦¬ê³  ì¸ë²ì§¸ ì¸ìë¤ë¡ ì´ë¥¼ í¸ì¶í¨ì¼ë¡ì íì¬
       머ì ì ëí 주ì´ì§ ìê·¸ëì´ íë¹íê°ë¥¼ ì²´í¬íëë° ì¬ì©ë  ì ìë¤.

       ìê·¸ë ì²´ê³ ì¡°ìì ëí ìì¸í ì 보를 ì»ì¼ë ¤ë©´, sigsetops(3) ì
       참조íë¼.

í¸í
       POSIX, SVr4.  SVr4 ë EINTR ì¡°ê±´ì ëí 문ì를 ì ê³µíì§ ìëë¤.

ê´ë ¨ í목
       kill(1), kill(2), killpg(2), pause(2), raise(3), siginterrupt(3),
       signal(2), signal(7), sigsetops(3), sigvec(2)

ë²ì
       ASPLINUX <man@asp-linux.co.kr> 2000ë 7ì 29ì¼
       íê¸ Manpage íë¡ì í¸ (http://man.kldp.org) 2005ë 2ì 13ì¼



Linux 2.2                         8 May 1999                      SIGACTION(2)