sigaction(2)
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : docbook>sigaction(2)



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
HTML º¯È¯¹®¼­

<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> 
<chapter lang=ko> 
<!-- ÀÛ¼ºÀÚ : yundream             --> 
<!-- ÀÛ¼ºÀÏ : 2004/04/27           --> 
<!-- ¿¬¶ôó : yundream@joinc.co.kr --> 
 
<!-- ÇÔ¼ö À̸§À» ÀÔ·ÂÇÕ´Ï´Ù --> 
<title>sigaction(2)</title> 
 
<!-- ÀÌ°Ç ÇÔ¼ö¿¡ ´ëÇÑ ´ë·«ÀûÀÎ ¼³¸íÀ̱¸¿ä --> 
<para> 
    ½Ã±×³Î 󸮰ü·Ã ÇÔ¼ö 
</para> 
  
<!-- ¿©±â¿¡ ÇÔ¼öÀÇ °£´ÜÇÑ »ç¿ë¹ýÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>»ç¿ë¹ý</title> 
    <para> 
        <screen> 
#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); 
        </screen> 
    </para> 
</section> 
 
<!-- ¿©±â¿£ ÇÔ¼öÀÇ ÀÚ¼¼ÇÑ ¼³¸í ÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>¼³¸í</title> 
    <para> 
        sigaction() ½Ã½ºÅÛ È£ÃâÀº ƯÁ¤ ½Ã±×³ÎÀÇ ¼ö½Å¿¡ ´ëÇØ¼­ ÃëÇÒ ¾×¼ÇÀ»  
        ¼³Á¤Çϰųª º¯°æÇϱâ À§Çؼ­ »ç¿ëµÈ´Ù.  
    </para> 
    <para> 
        <emphasis>signum</emphasis>´Â ½Ã±×³ÎÀ» ¸í½ÃÇÑ´Ù. SIGKILL°ú SIGSTOP¸¦  
        Á¦¿ÜÇÑ ¸ðµç ½Ã±×³ÎÀÌ Å¸´çÇÑ ½Ã±×³ÎÀÌ µÉ ¼ö ÀÖ´Ù.  
    </para> 
    <para> 
        ¸¸¾à <emphasis>act</emphasis>°¡ <emphasis>null</emphasis>ÀÌ ¾Æ´Ï¶ó¸é  
        signum¹øÈ£¸¦ °¡Áö´Â ½Ã±×³Î¿¡ ´ëÇØ¼­ actÇÔ¼ö°¡ ¼³Ä¡µÈ´Ù.  
        ¸¸¾à <emphasis>oldact</emphasis>°¡ nullÀÌ ¾Æ´Ï¶ó¸é ÀÌÀüÀÇ ¾×¼ÇÀº  
        <emphasis>oldact</emphasis>¿¡ ÀúÀåµÈ´Ù.  
    </para> 
    <para> 
        <emphasis>sigaction</emphasis>±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù. 
        <screen> 
struct sigaction  
{ 
    void (*sa_handler)(int); 
    void (*sa_sigaction)(int, siginfo_t *, void *); 
    sigset_t sa_mask; 
    int sa_flags; 
    void (*sa_restorer)(void); 
} 
        </screen> 
        <variablelist>     
            <varlistentry> 
            <term>sa_handler</term>     
            <listitem> 
                <para>     
                    signum¹øÈ£¸¦ °¡Áö´Â ½Ã±×³ÎÀÌ ¹ß»ýÇßÀ» ¶§ ½ÇÇàµÈ ÇÔ¼ö¸¦  
                    ¼³Ä¡ÇÑ´Ù. ÇÔ¼ö¿Ü¿¡µµ SIG_DFL°ú SIG_IGNÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. 
                    ÀüÀÚ´Â ½Ã±×³Î¿¡ ´ëÇÑ ±âº»ÇൿÀ» ÈÄÀÚ´Â ½Ã±×³ÎÀ» ¹«½ÃÇ챉  
                    À§Çؼ­ »ç¿ëÇÑ´Ù.   
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>sa_mask</term>     
            <listitem> 
                <para>     
                    sa_handler¿¡ µî·ÏµÈ ½Ã±×³Î Çڵ鷯 ÇÔ¼ö°¡ ½ÇÇàµÇ´Â µ¿¾È  
                    ºí·°µÇ¾î¾ß ÇÏ´Â ½Ã±×³ÎÀÇ ¸¶½ºÅ©¸¦ Á¦°øÇÑ´Ù. SA_NOMASK°¡  
                    Àû¿ëµÇ¾î ÀÖÁö ¾Ê´Ù¸é   
                </para>     
            </listitem> 
            </varlistentry> 
 
            <varlistentry> 
            <term>sa_flags</term>     
            <listitem> 
                <para>     
                    ½Ã±×³Î ó¸® ÇÁ·Î¼¼½ºÀÇ ÇàÀ§¸¦ ¼öÁ¤ÇÏ´Â ÀÏ·ÃÀÇ Ç÷¡±×µéÀ»  
                    ¸í½ÃÇÑ´Ù. ´ÙÀ½Áß Çϳª ÀÌ»óÀÇ °Íµé¿¡ ÀÇÇØ¼­ ¸¸µé¾î Áø´Ù.    
                    <variablelist>     
                    <varlistentry> 
                    <term>SA_NOCLDSTOP</term>     
                        <listitem> 
                        <para> 
                        ¸¸¾à signumÀÌ SIGCHLD¶ó¸é, ÀÚ½Ä ÇÁ·Î¼¼½º°¡ SIGSTOP,  
                        SIGTSTP, SIGTTIN, SIGTTOUµîÀ» ¹Þ¾Æ¼­ ÁߴܵǾúÀ» ¶§  
                        À̸¦ ÅëÁö ¹ÞÀ» ¼ö ¾ø°Ô µÈ´Ù.  
                        </para>     
                        </listitem> 
                    </varlistentry> 
                    <varlistentry> 
                    <term>SA_ONESHOT, SA_RESETHAND</term>     
                        <listitem> 
                        <para> 
                        ÀÏ´Ü ½Ã±×³Î 󸮱Ⱑ È£ÃâµÇ¸é, ±âº» »óÅ¿¡ ´ëÇÑ  
                        ½Ã±×³Î ¾×¼ÇÀ» Àç ÀúÀåÇÑ´Ù. ÀÌ´Â signal(2)È£Ãâ¿¡ ´ëÇÑ  
                        ±âº» ÇàÀ§ÀÌ´Ù.  
                        </para>     
                        </listitem> 
                    </varlistentry> 
                    <varlistentry> 
                    <term>SA_RESTART</term>     
                        <listitem> 
                        <para> 
                        ÀϺΠ½Ã½ºÅÛ È£ÃâµéÀÌ ½Ã±×³ÎÀ» ÅëÇØ Àç½ÃÀÛÇÒ ¼ö ÀÖµµ·Ï  
                        ÇÔÀ¸·Î¼­ BSD ½Ã±×³Î°ú ȣȯµÇµµ·Ï ÇÑ´Ù. 
                        </para>     
                        </listitem> 
                    </varlistentry> 
                    <varlistentry> 
                    <term>SA_NOMASK, SA_NODEFER</term>     
                        <listitem> 
                        <para> 
                        ½Ã±×³ÎÀÌ ÀÚü ½Ã±×³Î 󸮱â·ÎºÎÅÍ ¼ö½Å ¹ÞÁö ¾Êµµ·Ï ÇÑ´Ù. 
                        </para>     
                        </listitem> 
                    </varlistentry> 
                    <varlistentry> 
                    <term>SA_SIGINFO</term>     
                        <listitem> 
                        <para> 
                        ½Ã±×³Î 󸮱Ⱑ Çϳª°¡ ¾Æ´Ñ 3°³ÀÇ ÀÎÀÚ¸¦ ÃëÇÒ°æ¿ì  
                        sa_handler´ë½Å sigactionÀÇ siginfo_t¸¦ ÀÌ¿ëÇÒ ¼ö  
                        ÀÖ´Ù. siginto_t´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀÇµÈ ±¸Á¶Ã¼ÀÌ´Ù.           
                        <screen> 
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;     /* ÆÄÀÏ ±â¼úÀÚ */ 
} 
                        </screen> 
                        SIGCHLD ½Ã±×³ÎÀº si_pid, si_uid, si_status, si_utime, 
                        si_stime¸¦ ä¿î´Ù. si_int, si_ptrÀº ½Ã±×³ÎÀÇ ¼Û½ÅÀÚ¿¡  
                        ÀÇÇØ¼­ ¸í½ÃµÉ ¼ö ÀÖ´Ù.   
                        </para> 
                        <para> 
                        si_code´Â ¿Ö ½Ã±×³ÎÀÌ º¸³»Á³´ÂÁö¸¦ Áö½ÃÇÑ´Ù.  
                        </para> 
                        </listitem> 
                    </varlistentry> 
                    </variablelist>     
                </para>     
            </listitem> 
            </varlistentry> 
        </variablelist>     
    </para> 
    <para> 
        sigprocmask()´Â ÇöÀç ºí·ÏµÈ ½Ã±×³ÎµéÀ» º¯°æ½Ã۱â À§Çؼ­ »ç¿ëÇÑ´Ù.  
        È£ÃâÀÇ ÇàÀ§´Â <emphasis>how</emphasis> °ªµé¿¡ ´ëÇØ¼­ ÀÇÁ¸ÀûÀÌ µÈ´Ù.  
        how´Â ´ÙÀ½Áß Çϳª¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.   
        <variablelist>     
            <varlistentry> 
            <term>SIG_BLOCK</term> 
            <listitem> 
            <para> 
                <emphasis>set</emphasis>¿¡ ¼³Á¤µÈ ½Ã±×³ÎÀ» ºí·° ½Ã±×³Î¼Â¿¡  
                Ãß°¡½ÃŲ´Ù.  
            </para> 
            </listitem> 
            </varlistentry> 
 
            <varlistentry> 
            <term>SIG_UNBLOCK</term> 
            <listitem> 
            <para> 
                ½Ã±×³Î ¼Â<emphasis>set</emphasis>ÀÇ ½Ã±×³ÎÀ» ÇöÀçÀÇ ºí·°µÈ  
                ½Ã±×³Î¿¡¼­ »èÁ¦ÇÑ´Ù.  
            </para> 
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>SIG_SETMASK</term> 
            <listitem> 
            <para> 
                ½Ã±×³Î ¼Â<emphasis>set</emphasis>ÀÇ ½Ã±×³ÎÀ» ºí·°È­µÈ ½Ã±×³Î·Î 
                ÁöÁ¤ÇÑ´Ù. 
            </para> 
            </listitem> 
            </varlistentry> 
        </variablelist>     
        <emphasis>oldset</emphasis>ÀÌ nullÀÌ ¾Æ´Ï¸é, ½Ã±×³Î ¸¶½ºÅ©ÀÇ ÀÌÀü °ªÀº 
        oldset¿¡ ÀúÀåµÈ´Ù.     
    </para> 
    <para> 
        sigpending()ÇÔ¼ö´Â Àü´Þ ½Ã±×³Îµé¿¡ ´ëÇÑ °Ë»ç¸¦ Çã¿ëÇÑ´Ù. Àü´Þ ½Ã±×³ÎµéÀÇ 
        ¸¶½ºÅ©´Â <emphasis>set</emphasis>¿¡ ÀúÀåµÈ´Ù.  
    </para> 
    <para> 
        sigsuspend()´Â ÇÁ·Î¼¼½ºÀÇ ½Ã±×³Î ¸¶½ºÅ©¸¦ ÀϽÃÀûÀ¸·Î  
        <emphasis>mask</emphasis>·Î ´ëüÇϰí, ½Ã±×³ÎÀÌ ¼ö½ÅµÉ¶§±îÁö ÇÁ·Î¼¼½º¸¦ 
        ÁßÁö½ÃŲ´Ù. 
    </para> 
</section> 
 
<!-- ÇÔ¼ö°¡ µÇµ¹·ÁÁÖ´Â °ªÀ̱¸¿ä --> 
<section> 
    <title>¹Ýȯ°ª</title> 
    <para> 
        ¼º°øÇϸé 0À» ½ÇÆÐÇϸé -1À» ¸®ÅÏÇÑ´Ù. 
    </para> 
</section> 
 
<!-- ¿¡·¯°¡ ¹ß»ýÇßÀ»¶§ µÇµ¹·ÁÁÖ´Â °ªµéÀÔ´Ï´Ù --> 
<section> 
    <title>¿¡·¯</title> 
    <para> 
        <variablelist>     
            <varlistentry> 
            <term>EINVAL</term>     
            <listitem> 
                <para>     
                    ºÎÀûÀýÇÑ ½Ã±×³ÎÀÌ ÁöÁ¤µÇ°Å³ª. ¹«½ÃÇÒ ¼ö ¾ø´Â SIGKILL 
                    SIGSTOP¿¡ ´ëÇÑ ¾×¼ÇÀ» º¯°æÇϰíÀÚ ÇÒ °æ¿ì 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>EFAULT</term>     
            <listitem> 
                <para>     
                    act, oldact, set, oldset ÀÌ Å¸´çÇÏÁö ¾ÊÀº ¸Þ¸ð¸® ¿µ¿ªÀ»  
                    °¡¸®Å³ °æ¿ì 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>EINTR</term>     
            <listitem> 
                <para>     
                    ½Ã½ºÅÛ È£ÃâÀÌ ÀÎÅÍ·´Æ® µÇ¾ú´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
        </variablelist>     
    </para> 
</section> 
 
<!-- ¸¶Áö¸·À¸·Î ¿¡Á¦ ÀÔ´Ï´Ù                                                 --> 
<!-- ¿©±â¿¡´Â ¿ÏÀüÇÑ ¿¹Á¦°¡ µé¾î°¡ Àִµ¥, ±»ÀÌ ¿ÏÀüÇÑ ¿¹Á¦¸¦ ¸¸µéÇÊ¿ä ¾øÀÌ --> 
<!-- ÄÚµå ÀϺκи¸ ÀÛ¼ºÇؼ­ ¿Ã·ÁÁּŵµ µË´Ï´Ù                               -->  
<!-- "<", ">", "&" µîÀº º¯È¯ÇØ ÁÖ¼Å¾ß Çϴµ¥, ±ÍÂúÀ¸½Ã¸é :-) º¯È¯ ÇÏÁö ¾Ê   --> 
<!-- ¾Æµµ µË´Ï´Ù. Á¦°¡ °Ë»ç ÇØ¼­ ¿Ã¸®°Ú½À´Ï´Ù                               --> 
<!-- ¿¹Á¦¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸íÀ» Àû¾îÁּŵµ µÇ±¸¿ä                            --> 
<section> 
    <title>¿¹Á¦</title> 
    <para> 
        <screen> 
#include <signal.h>  
#include <unistd.h>  
#include <string.h>  
#include <stdio.h>  
 
void sig_int(int signo); 
void sig_usr(int signo); 
 
int main() 
{ 
    int i = 0; 
    struct sigaction intsig, usrsig; 
 
    usrsig.sa_handler = sig_usr; 
    sigemptyset(&usrsig.sa_mask); 
    usrsig.sa_flags = 0; 
 
    intsig.sa_handler = sig_int; 
    sigemptyset(&intsig.sa_mask); 
    intsig.sa_flags = 0; 
 
    // SIGINT¿¡ ´ëÇØ¼­ sig_int¸¦ µî·ÏÇÑ´Ù.  
    if (sigaction(SIGINT, &intsig, 0) == -1) 
    { 
        printf ("signal(SIGINT) error"); 
        return -1; 
    }     
 
    // SIGUSR2¿¡ ´ëÇØ¼­ usrsig¸¦ µî·ÏÇÑ´Ù.  
    if (sigaction(SIGUSR2, &usrsig, 0) == -1) 
    { 
        printf ("signal(SIGUSR2) error"); 
        return -1; 
    }     
 
    while(1) 
    { 
        printf("%d\n", i); 
        i++; 
        sleep(1); 
    } 
} 
 
void sig_int(int signo) 
{ 
    sigset_t sigset, oldset; 
 
    // Çڵ鷯°¡ ¼öÇàµÇ´Â µ¿¾È ¼ö½ÅµÇ´Â ¸ðµç ½Ã±×³Î¿¡ ´ëÇØ¼­ 
    // ºí·°ÇÑ´Ù.   
    sigfillset(&sigset); 
    if (sigprocmask(SIG_BLOCK, &sigset, &oldset) < 0) 
    { 
        printf("sigprocmask %d error \n", signo); 
    } 
    fprintf(stderr, "SIGINT !!!!\n"); 
    sleep(5); 
} 
 
void sig_usr(int signo) 
{ 
    printf("sig_usr2\n"); 
} 
        </screen> 
    </para> 
</section> 
<section> 
    <title>Âü°í¹®Çå</title> 
    <para> 
        <orderedlist> 
        <listitem> 
            <para> 
                sigsetops(3); 
            </para> 
        </listitem> 
        <listitem> 
            <para> 
            <ulink url="http://www.joinc.co.kr/modules/moniwiki/wiki.php/article_signal_´Ù·ç±â_2">½Ã±×³Î ´Ù·ç±â 2</ulink> 
            </para> 
        </listitem> 
        <listitem> 
            <para> 
            <ulink url="http://www.joinc.co.kr/modules/moniwiki/wiki.php/article_signal_´Ù·ç±â_3">½Ã±×³Î ´Ù·ç±â 3</ulink> 
            </para> 
        </listitem> 
        <listitem> 
            <para> 
            <ulink url="http://www.joinc.co.kr/modules/moniwiki/wiki.php/article_¾²·¹µå¿Í_½Ã±×³Î">¾²·¹µå¿Í ½Ã±×³Î</ulink> 
            </para> 
        </listitem> 
        </orderedlist> 
    </para> 
</section> 
</chapter> 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.