ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : docbook>sigaction(2)
![]()
Tweet
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À» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|