[ 1Àå, 2Àå, 3Àå, 4Àå, 5Àå, 6Àå, 7Àå, 8Àå, 9Àå, 10Àå, 11Àå, 12Àå, 13Àå, 14Àå, 15Àå, 16Àå, 17Àå, 18Àå, 19Àå, 20Àå, 21Àå, 22Àå, 23Àå, 24Àå, 25Àå, 26Àå, 27Àå, ºÎ·ÏA, ºÎ·ÏB,C, ºÎ·ÏD, GNU C ¶óÀ̺귯¸® ¸ñ·Ï ]

À̱ÛÀº ÇÏÀÌÅÚ ¼ÒÇÁÆ®¿þ¾îµ¿È£È¸ÀÇ ¼Ò¸ðÀÓÀÎ Á÷ÀåÀÎÀ» À§ÇÑ ¾¾¸ðÀÓ¿¡¼­ ÀåÀå 2³â°£ÀÇ ´ëÀåÁ¤À¸·Î ¹ø¿ªµÇ¾îÁø ¹®¼­ÀÔ´Ï´Ù. Áö±ÝÀº Á÷¾¾ÀåÀ» Áö³»°í ÀÖ´Â ±è¼Ò¿µ(flpigy)´Ô°ú Á¶¿øºÀ(thirnine)´Ô, °í¼®°©´Ô(sukgab)ÀÇ °øµ¿¹ø¿ªÀÔ´Ï´Ù.

23. ÀÚ½Ä ÇÁ·Î¼¼½º

ÇÁ·Î¼¼½ºµéÀº ½Ã½ºÅÛÀÇ ÀÚ¿øµéÀÇ ÇÒ´çÀ» À§ÇÑ ±âº»ÀûÀÎ ´ÜÀ§ÀÌ´Ù. °¢ ÇÁ·Î¼¼½º´Â ÀڽŸ¸ÀÇ ÁÖ¼Ò°ø °£°ú (º¸Åë) ÇÑ °³ÀÇ Á¦¾î ¾²·¹µå¸¦ °®´Â´Ù. ÇÁ·Î¼¼½º´Â ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù; ´ç½ÅÀº °°Àº ÇÁ·Î±× ·¥À» ½ÇÇàÇϴµ¥ ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º¸¦ °¡Áú ¼ö ÀÖÁö¸¸, °¢°¢ÀÇ ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀÇ ÁÖ¼Ò°ø°£¿¡¼­ ÀÚ ½ÅÀÇ ÇÁ·Î±×·¥ º¹Á¦º»À» °®°í ´Ù¸¥ ÇÁ·Î±×·¥ º¹»çº»°ú µ¶¸³ÀûÀ¸·Î ½ÇÇàµÈ´Ù.

ÇÁ·Î¼¼½ºµéÀº °èÃþÀûÀ¸·Î ±¸¼ºµÈ´Ù. °¢ ÇÁ·Î¼¼½º´Â ±×°ÍÀ» ¸¸µé¾ú´ø ºÎ¸ð ÇÁ·Î¼¼½º¸¦ °®´Â´Ù. ÁÖ ¾îÁø ºÎ¸ð ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¸¸µé¾îÁø ÇÁ·Î¼¼½º´Â ÀÚ½Ä ÇÁ·Î¼¼½º¶ó°í ºÒ¸°´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ð ÇÁ·Î¼¼½º·ÎºÎÅÍ ±× ¼Ó¼ºÀÇ ´ëºÎºÐÀ» »ó¼Ó¹Þ´Â´Ù.

ÀÌ ÀåÀº ÇÁ·Î±×·¥¿¡¼­ ¾î¶² ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸¸µé°í, Á¾·áÇϰí, Á¦¾îÇÏ´ÂÁö¿¡ ´ëÇØ¼­ ¼³¸íÇϰí ÀÖ ´Ù. ½ÇÁ¦·Î, »õ·Î¿î ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸¸µé·Î, »õ·Î¿î ÇÁ·Î¼¼½º°¡ ÇÁ·Î±×·¥À» ½ÇÇà½Ã۰í, ¿ø·¡ÀÇ ÇÁ ·Î±×·¥°ú ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Á¶È­·Ó°Ô ¼öÇàµÇµµ·Ï Çϴµ¥¿¡´Â ¼¼°¡ÁöÀÇ µ¶¸²ÀûÀÎ ¸í·ÉÀÌ ÀÖ´Ù.

system ÇÔ¼ö´Â ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇà½Ã۱â À§ÇÑ °£´ÜÇϰí, À̽ļº ÀÖ´Â ¸ÞÄ«´ÏÁòÀ» Á¦°øÇÑ´Ù. ±× µéÀº ÀÚµ¿ÀûÀ¸·Î ¼¼ °³ÀÇ ´Ü°è¸¦ °ÅÄ£´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ÀÌ·¯ÇÑ ÀϵéÀ» Çϴµ¥ ¼¼½ÉÇÏ°Ô Á¦¾îÇÒ ÇÊ¿ä °¡ ÀÖ´Ù¸é, ´ç½ÅÀº °¢ ´Ü°è¸¦ °³º°ÀûÀ¸·Î ¼öÇàÇÏ´Â ±âº» ÇÔ¼öµéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

23.1 ¸í·É ½ÇÇà½Ã۱â.

´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ À§ÇÑ °¡Àå ½¬¿î ¹æ¹ýÀº system ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ½Ç ÇàµÇ´Â ¼­ºêÇÁ·Î±×·¥ÀÇ ¸ðµç ÀÛ¾÷À» ¼öÇàÇÏÁö¸¸, ´ç½ÅÀÌ ¼¼¹ÐÇÏ°Ô Á¦¾î¸¦ ÇÒ ¼ö´Â¾ø´Ù: ´ç½ÅÀÌ ¾î ¶² °ÍÀ» ÇÒ ¼ö ÀÖ±â Àü¿¡ ±× ¼­ºê ÇÁ·Î±×·¥ÀÌ Á¾·áµÉ¶§±îÁö ±â´Ù·Á¾ß¸¸ ÇÑ´Ù.

ÇÔ¼ö : int system (const char *command)

ÀÌ ÇÔ¼ö´Â ½© Ä¿¸Çµå·Î½á command¸¦ ½ÇÇàÇÑ´Ù. GNU C ¶óÀ̺귯¸®¿¡¼­, ±×°ÍÀº Ç×»ó Ä¿¸Çµå¸¦ ½Ç ÇàÇϵµ·Ï µðÆúÆ® ½© sh¸¦ »ç¿ëÇÑ´Ù. Ưº°ÇϰÔ, ½ÇÇàÇϱâ À§ÇÑ ÇÁ·Î±×·¥À» ã±âÀ§Çؼ­ PATH¿¡ ÀÖ ´Â µð·ºÅ丮µéÀ» Ž»öÇÑ´Ù. ¸®ÅϰªÀº ¸¸ÀÏ ½© ÇÁ·Î¼¼½º¸¦ ¸¸µé±â°¡ ºÒ°¡´ÉÇϸé -1À» ¸®ÅÏÇÏ°í ±×·¸ Áö¾Ê´Ù¸é ½© ÇÁ·Î¼¼½ºÀÇ »óȲÀÌ µÈ´Ù. ÀÌ »óȲ Äڵ尡 ¾î¶»°Ô ÇØ¼®µÇ¾îÁö´ÂÁö¿¡ ´ëÇØ¼­´Â 23.6Àý [Process Completion] 329 ÆäÀÌÁö ÂüÁ¶. system ÇÔ¼ö´Â Çì´õÆÄÀÏ `stdlib.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

À̽ļº ³ëÆ®: ¾î¶² C¿¡¼­´Â ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Â Ä¿¸Çµå ÇÁ·Î¼¼½ºÀÇ °³³äÀ» °¡ÁöÁö ¾Ê À»¼öµµ ÀÖ´Ù. ´ç½ÅÀº Ä¿¸Çµå ÇÁ·Î¼¼½º°¡ Á¸ÀçÇÏ´ÂÁö¿¡ ´ëÇÑ ¿©ºÎ¸¦ system(NULL)À» ½ÇÇàÇØº½À¸·Î½á ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù; ¸¸ÀÏ ±× ¸®ÅϰªÀÌ 0ÀÌ ¾Æ´Ï¸é, Ä¿¸Çµå ÇÁ·Î¼¼¼­´Â À¯¿ëÇÏ´Ù.

popen °ú pclose ÇÔ¼öµéÀº(10.2Àý [Pipe to a Subprocess] 146 ÆäÀÌÁö ÂüÁ¶) system ÇÔ¼ö¿Í ¹ÐÁ¢ÇÏ °Ô ¿¬°üµÇ¾î ÀÖ´Ù. ±×µéÀº ½ÇÇàµÇ°í ÀÖ´Â Ä¿¸ÇµåÀÇ Ç¥ÁØ ÀÔ/Ãâ·Â ä³Î°ú Åë½ÅÇϵµ·Ï ºÎ¸ð ÇÁ·Î¼¼½º ¿¡°Ô Çã¿ëÇÑ´Ù.

23.2 ÇÁ·Î¼¼½º ¸¸µé±â¿¡ ´ëÇÑ ¿øÄ¢.

ÀÌ ÀýÀº ÇÁ·Î¼¼½º¿Í ÇÁ·Î¼¼½º¸¦ ¸¸µå´Âµ¥ Æ÷ÇԵǴ ´Ü°è¿Í ±×°ÍÀÌ ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇàÇϵµ·Ï ¸¸ µå´Âµ¥ ´ëÇÑ °³¿ä°¡ ÀÖ´Ù. °¢ ÇÁ·Î¼¼½º´Â ÇÁ·Î¼¼½º ID ¹øÈ£¿¡ ÀÇÇØ À̸§Áö¾îÁø´Ù. ¾î¶² ´ÜÀÏÇÑ ÇÁ ·Î¼¼½º ID´Â ±×°ÍÀÌ ¸¸µé¾îÁú ¶§ °¢ ÇÁ·Î¼¼½º¿¡°Ô ÇÒ´çµÇ¾îÁø´Ù. ÇÁ·Î¼¼½ºÀÇ ¼ö¸íÀÌ ´ÙÇÏ¸é ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô º¸°íµÈ´Ù; ±×¶§, ±× ÇÁ·Î¼¼½º ID¿¡ Æ÷ÇÔµÈ ÇÁ·Î¼¼½ºÀÇ ¸ðµç ÀÚ¿øµéÀº ÇØÁ¦µÈ´Ù.

ÇÁ·Î¼¼½ºµéÀº fork ½Ã½ºÅÛ È£Ãâ·Î ¸¸µé¾îÁø´Ù( ±×·¡¼­ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ ¸¸µå´Â µ¿ÀÛÀ» forking a process¶ó°í ºÎ¸£±âµµ ÇÑ´Ù.). fork¿¡ ÀÇÇØ ¸¸µé¾îÁø ÀÚ½Ä ÇÁ·Î¼¼½º´Â ¿ÀÁ÷ ÀÚ½ÅÀÇ ÇÁ·Î¼¼½º ID¸¦ Á¦¿ÜÇϰí´Â, ¿ø·¡ ºÎ¸ð ÇÁ·Î¼¼½ºÀÇ ¿ÏÀüÇÑ º¹Á¦ÀÌ´Ù.

ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸¸µç ÈÄ¿¡, ºÎ¸ð¿Í ÀÚ½Ä ÇÁ·Î¼¼½º ¸ðµÎ´Â Á¤»óÀûÀ¸·Î ½ÇÇàÀ» °è¼ÓÇÑ´Ù. ¸¸ÀÏ ´ç ½ÅÀÌ ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡¼­ ½ÇÇàÀ» °è¼ÓÇϱâ Àü¿¡ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ½ÇÇàÀ» ³¡³»µµ·Ï ±â´Ù¸®±â ¿øÇÑ ´Ù¸é, fork ¿¬»êÀ» ¼öÇàÇÑ ÈÄ¿¡ wait ³ª waitpid(23.6Àý [Process Completion] 329 ÆäÀÌÁö ÂüÁ¶)¸¦ È£ ÃâÇÔÀ¸·Î½á ¸í¹éÇÏ°Ô ÀÌÀÏÀ» Çϵµ·Ï ÇØ¾ß¸¸ ÇÑ´Ù. ±×µé ÇÔ¼öµéÀº ÀÚ½ÄÇÁ·Î¼¼½º°¡ ¿Ö Á¾·áµÇ¾ú´ÂÁö ¿¡ ´ëÇÑ Á¦ÇÑµÈ Á¤º¸_¿¹¸¦ µé¸é, exit »óȲÄÚµå_¸¦ ÁØ´Ù.

»õ·Ó°Ô ¸¸µé¾îÁø ÀÚ½Ä ÇÁ·Î¼¼½º´Â fork°¡ returnÀ» È£ÃâÇÑ ÁöÁ¡¿¡¼­ ºÎ¸ð ÇÁ·Î¼¼½º¿Í °°Àº ÇÁ·Î±× ·¥À» ½ÇÇàÇÑ´Ù. ´ç½ÅÀº ±× ÇÁ·Î±×·¥ÀÌ ºÎ¸ð ÇÁ·Î¼¼½º ¶Ç´Â ÀÚ½Ä ÇÁ·Î¼¼½º¿¡¼­ ½ÇÇàµÇ°í ÀÖ´ÂÁö¿¡ ´ëÇØ¼­ ¾Ë±â À§Çؼ­ fork·ÎºÎÅÍÀÇ ¸®ÅϰªÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¿©·¯°³ÀÇ ÇÁ·Î¼¼½º°¡ °°Àº ÇÁ·Î±×·¥À» ½ÇÇàÇϱâ´Â ¶§¶§·Î À¯¿ëÇÏ´Ù. ±×·¯³ª ÀÚ½Ä ÇÁ·Î¼¼½º´Â exec ÇÔ¼öµéÁßÀÇ Çϳª¸¦ »ç¿ëÇØ¼­ ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖ´Ù; 23.5Àý [Executing a File] 327 ÆäÀÌ Áö ÂüÁ¶. ÇÁ·Î¼¼½º°¡ ½ÇÇà½Ã۰í ÀÖ´Â ÇÁ·Î±×·¥À» ÇÁ·Î¼¼½º À̹ÌÁö(process image)¶ó°í ºÎ¸¥´Ù. »õ ·Î¿î ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ» ½ÃÀÛÇÏ´Â °ÍÀº ÇÁ·Î¼¼½º°¡ ±× ÀüÀÇ ÇÁ·Î¼¼½º À̹ÌÁö¿¡ ´ëÇÑ ¸ðµç°ÍÀ» ÀØ°Ô ÇÑ´Ù; »õ·Î¿î ÇÁ·Î±×·¥ÀÌ Á¾·áµÉ ¶§, ±× ÀüÀÇ ÇÁ·Î¼¼½º À̹ÌÁö¸¦ ¸®ÅÏÇÏÁö ¾Ê°í, ÇÁ·Î±×·¥Ã³·³ Á¾·á ÇÑ´Ù.

23.3 ÇÁ·Î¼¼½º ½Äº°.

pid_t µ¥ÀÌÅÍ Å¸ÀÔÀº ÇÁ·Î¼¼½º IDµéÀ» ³ªÅ¸³½´Ù. ´ç½ÅÀº getpid¸¦ È£ÃâÇÔÀ¸·Î½á ÇÁ·Î¼¼½ºÀÇ ID¸¦ ¾òÀ» ¼ö ÀÖ´Ù. getppid ÇÔ¼ö´Â ÇöÀç ÇÁ·Î¼¼½ºÀÇ (À̰ÍÀº ¶ÇÇÑ ºÎ¸ð ÇÁ·Î¼¼½ºÀÇ ID·Î½á ¾Ë·ÁÁ® ÀÖ ´Ù.) ºÎ¸ð ÇÁ·Î¼¼½º ID¸¦ ¸®ÅÏÇÑ´Ù. ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡¼­ ±×µé ÇÔ¼ö¸¦ »ç¿ëÇϱâ À§Çؼ­´Â `unistd.h' ¿Í `sys/types.h'ÀÇ Çì´õÆÄÀÏÀ» Æ÷ÇÔÇØ¾ßÇÑ´Ù.

µ¥ÀÌÅÍ Å¸ÀÔ : pid__t

pid_t µ¥ÀÌÅÍ Å¸ÀÔÀº ÇÁ·Î¼¼½º ID¸¦ Ç¥ÇöÇÏ´Â ºÎȣȭ Á¤¼ö ŸÀÔÀÌ´Ù. GNU ¶óÀ̺귯¸®¿¡¼­, À̰ÍÀº int ÀÌ´Ù.

ÇÔ¼ö : pid_t getpid (void)

getpid ÇÔ¼ö´Â ÇöÀç ÇÁ·Î¼¼½ºÀÇ ÇÁ·Î¼¼½º ID¸¦ ¸®ÅÏÇÑ´Ù.

ÇÔ¼ö : pid_t getppid (void)

getppid ÇÔ¼ö´Â ÇöÀç ÇÁ·Î¼¼½ºÀÇ ºÎ¸ð ÇÁ·Î¼¼½º ID¸¦ ¸®ÅÏÇÑ´Ù.

23.4 ÇÁ·Î¼¼½º ¸¸µé±â.

fork ÇÔ¼ö´Â ÇÁ·Î¼¼½º¸¦ ¸¸µå´Â ±âº»µ¿ÀÛ(primitive)ÀÌ´Ù. ±×°ÍÀº Çì´õÆÄÀÏ `unistd.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

ÇÔ¼ö : pid_t fork (void)

fork ÇÔ¼ö´Â »õ·Î¿î ÇÁ·Î¼¼½º¸¦ ¸¸µç´Ù. ¸¸ÀÏ ±× ¸í·ÉÀÌ ¼º°øÇϸé, ±×°÷¿¡´Â ºÎ¸ð¿Í ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Á¸ÀçÇÏ°í ±× µÑÀº forkÀÇ ¸®ÅϰªÀ» ¼­·Î ´Ù¸¥ °ªÀ¸·Î º¸°ÔµÈ´Ù. ÀÚ½ÄÇÁ·Î¼¼½º¾È¿¡¼­´Â 0ÀÇ °ªÀ» ¸® ÅÏÇÏ°í ºÎ¸ð ÇÁ·Î¼¼½º ¾È¿¡¼­´Â ÀÚ½Ä ÇÁ·Î¼¼½ºÀÇ ID¸¦ ¸®ÅÏÇÑ´Ù. ¸¸ÀÏ ÇÁ·Î¼¼½º ¸¸µé±â°¡ ½ÇÆÐÇÏ ¸é, fork´Â ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô -1ÀÇ °ªÀ» ¸®ÅÏÇÑ´Ù. ´ÙÀ½ÀÇ errno´Â fork¸¦ À§ÇØ Á¤ÀÇµÈ ¿¡·¯ »óȲ ÀÌ´Ù.

EAGAIN

´Ù¸¥ ÇÁ·Î¼¼½º¸¦ ¸¸µé¸¸ÇÑ ÃæºÐÇÑ ½Ã½ºÅÛ ÀÚ¿øÀÌ ¾ø°Å³ª, »ç¿ëÀÚ°¡ ÀÌ¹Ì ³Ê¹« ¸¹Àº ÇÁ·Î¼¼½ºµéÀ» ½Ç Çà½Ã۰í ÀÖ´Ù.

ENOMEM

ÇÁ·Î¼¼½º´Â ½Ã½ºÅÛÀÌ °ø±ÞÇÒ ¼ö Àִ°ͺ¸´Ù ´õ ¸¹Àº °ø°£À» ÇÊ¿ä·Î ÇÑ´Ù.

´ÙÀ½Àº ºÎ¸ð ÇÁ·Î¼¼½º¿Í´Â ´Ù¸¥, ÀÚ½Ä ÇÁ·Î¼¼½ºÀÇ Á¤ÇØÁø ¼Ó¼ºÀÌ´Ù.

둁 ÀÚ½Ä ÇÁ·Î¼¼½º´Â ÀڽŸ¸ÀÇ ´ÜÀÏÇÑ ÇÁ·Î¼¼½º ID¸¦ °®´Â´Ù.

둁 ÀÚ½Ä ÇÁ·Î¼¼½ºÀÇ ºÎ¸ð ÇÁ·Î¼¼½º ID´Â ±× ÀÚ½ÅÀÇ ºÎ¸ð ÇÁ·Î¼¼½ºÀÇ IDÀÌ´Ù.

둁 ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ð ÇÁ·Î¼¼½º°¡ °³¹æÇÑ ÆÄÀÏ ±â¼úÀÚÀÇ ÀڽмÒÀ¯ÀÇ º¹»çº»À» °¡Áø´Ù. ºÎ¸ð ÇÁ ·Î¼¼½º¾È¿¡¼­ ¿¬¼ÓÀûÀ¸·Î ¼Ó¼ºÀÌ º¯È­ÇÏ´Â ÆÄÀÏ ±â¼úÀÚµéÀº ÀÚ½Ä ÇÁ·Î¼¼½ºÀÇ ÆÄÀÏ ±â¼úÀÚ¿¡°Ô ¿µÇâ À» ¹ÌÄ¡Áö ¾Ê°í, ±×¸®°í ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ¼ÓÇÑ ÆÄÀϱâ¼úÀÚÀÇ ¼Ó¼ºÀÌ º¯ÇÑ´Ù°í ÇØµµ ±×°Í¶ÇÇÑ ºÎ¸ð ÇÁ·Î¼¼½ºÀÇ ±â¼úÀÚ¿¡°Ô ¿µÇâÀ» ¹ÌÄ¡Áö ¸øÇÑ´Ù. 8.7Àý [Control Operations] 113 ÆäÀÌÁö ÂüÁ¶.

둁 ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ À§ÇÏ¿© °æ°úµÈ ÇÁ·Î¼¼¼­ ½Ã°£Àº 0À¸·Î ¼³Á¤µÈ´Ù; 17.1Àý [Processor Time] 233 ÆäÀÌÁö ÂüÁ¶.

둁 ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ð ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¼³Á¤µÈ ÆÄÀÏ ¶ô(lock)µéÀ» »ó¼Ó¹ÞÁö ¾Ê´Â´Ù. 8.7Àý [Control Operations] 113 ÆäÀÌÁö ÂüÁ¶.

둁 ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ð ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¼³Á¤µÈ ¾Ë¶÷(alarm)À» »ó¼Ó ¹ÞÁö ¾Ê´Â´Ù. 17.3Àý [Setting an Alarm] 243 ÆäÀÌÁö ÂüÁ¶.

둁 ÀÚ½Ä ÇÁ·Î¼¼¸¦ À§Çؼ­ ¹Ìó¸®ÁßÀÎ ½Ã±×³¯ÀÇ ¼³Á¤(21.1.3Àý [Delivery of Signal] 272 ÆäÀÌÁö ÂüÁ¶)Àº ¼Ò°ÅµÈ´Ù. (ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ð ÇÁ·Î¼¼½º·ÎºÎÅÍ ºí·ÏµÈ ½Ã±×³¯ÀÇ ¸¶½ºÅ©¿Í ½Ã±×³¯ µ¿ÀÛÀ» »ó¼Ó¹Þ ´Â´Ù.)

ÇÔ¼ö : pid_t vfork (void)

vfork ÇÔ¼ö´Â fork¿Í À¯»çÇÏÁö¸¸ ´õ È¿À²ÀûÀÌ´Ù; ÇÏÁö¸¸, ±×°ÍÀ» ¾ÈÀüÇÏ°Ô »ç¿ëÇϱâ À§Çؼ­ µû·ª¾ß¸¸ ÇÏ´Â Á¦ÇÑÀÌ ÀÖ´Ù. fork´Â È£ÃâµÈ ÇÁ·Î¼¼½ºÀÇ ÁÖ¼Ò°ø»êÀÇ ¿ÏÀüÇÑ º¹Á¦º»À» ¸¸µé°í ºÎ¸ð¿Í ÀÚ½Ä ÇÁ·Î ¼¼½º°¡ µ¶¸³ÀûÀ¸·Î ½ÇÇàµÇµµ·Ï Çã¿ëÇÏÁö¸¸, vfork´Â ÀÌ º¹Á¦º»À» ¸¸µéÁö ¾Ê´Â´Ù. ´ë½Å¿¡, vfork·Î ¸¸µé¾îÁø ÀÚ½Ä ÇÁ·Î¼¼½º´Â exec ÇÔ¼öµéÁßÀÇ Çϳª°¡ È£ÃâµÉ¶§±îÁö ºÎ¸ðÀÇ ÁÖ¼Ò°ø°£À» ºÐ¹è¹Þ´Â´Ù. ±×°ÍÀº ºÎ¸ð ÇÁ·Î¼¼½º°¡ ÀϽÃÀûÀ¸·Î ½ÇÇàÀ» ¸ØÃß°Ô µÊÀ» ÀǹÌÇÑ´Ù.

´ç½ÅÀº vfork·Î ¸¸µé¾îÁø ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ºÎ¸ð·ÎºÎÅÍ ºÐ¹è¹ÞÀº Àü¿ª µ¥ÀÌÅͳª ½ÉÁö¾î Áö¿ª º¯¼öµé ÀÇ °»½ÅÀ» Çã¿ëÇÏÁö ¾Êµµ·Ï ¸Å¿ì ÁÖÀÇÇØ¾ß¸¸ ÇÑ´Ù. °Ô´Ù°¡, ÀÚ½Ä ÇÁ·Î¼¼½º´Â È£ÃâµÈ vfork ÇÔ¼ö·ÎºÎ ÅÍ ¸®ÅÏÇÒ ¼ö ¾ø´Ù(¶Ç´Â vfork ÇÔ¼öÀÇ ¹ÛÀ¸·Î long jumpÇϴ°Í). À̰ÍÀº ºÎ¸ð ÇÁ·Î¼¼½ºÀÇ Á¦¾î Á¤ º¸¸¦ ¸Å¿ì È¥¶õ½º·´°Ô ¸¸µç´Ù. ¸¸ÀÏ ÀǽÉÀÌ µÈ´Ù¸é, ´ë½Å¿¡ fork¸¦ »ç¿ëÇ϶ó. ¾î¶² ¿î¿µÃ¼Á¦´Â ½ÇÁ¦ ·Î vfork¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. GNU C ¶óÀ̺귯¸®´Â ¸ðµç ½Ã½ºÅÛ¿¡¼­ vfork¸¦ »ç¿ëÇϵµ·Ï Çã¿ëÇÏÁö ¸¸, vfork°¡ À¯¿ëÇÏÁö ¾Ê´Ù¸é ½ÇÁ¦·Î´Â fork¸¦ ½ÇÇàÇÑ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ vfork¸¦ »ç¿ëÇϱâ À§Çؼ­ Àû ´çÇÏ°Ô ¿¹¹æÁ¶Ä¡¸¦ ÃëÇÑ´Ù¸é, ´ç½ÅÀÇ ÇÁ·Î±×·¥Àº ½Ã½ºÅÛ¿¡¼­ ´ë½Å¿¡ fork¸¦ »ç¿ëÇØ¼­¶óµµ ¿©ÀüÈ÷ ÀÛ ¾÷ÇÒ °ÍÀÌ´Ù.

23.5 ÆÄÀÏ ½ÇÇà½Ã۱â.

ÀÌÀýÀº ÇÁ·Î¼¼½º À̹ÌÁö·Î½á ÆÄÀÏÀ» ½ÇÇà½ÃŰ´Â execºÎ·ùÀÇ ÇÔ¼öµéÀ» ¼³¸íÇÑ´Ù. ´ç½ÅÀº ÀÚ½Ä ÇÁ·Î ¼¼½º°¡ ¸¸µé¾îÁø ÈÄ¿¡ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ »õ·Î¿î ÇÁ·Î±×·¥À» ½ÇÇàÇϵµ·Ï ±×µé ÇÔ¼öµéÀ» »ç¿ëÇÒ ¼ö ÀÖ ´Ù. ÀÌ ºÎ·ùÀÇ ÇÔ¼öµéÀº °°Àº ÀÏÀ» ÇÏÁö¸¸, Àμö¸¦ Á¤ÇÏ´Â ¹æ¹ýÀº Â÷À̰¡ ÀÖ´Ù. ±×µéÀº Çì´õÆÄÀÏ `unistd.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

ÇÔ¼ö : int execv (const char *filename, char *const argv[])

execv ÇÔ¼ö´Â »õ·Î¿î ÇÁ·Î¼¼½º À̹ÌÁö·Î½á ÆÄÀÏÀ̸§ filenameÀ» ½ÇÇàÇÑ´Ù. ³Î-Á¾·á ¹®ÀÚ¿­ÀÇ ¹è¿­ ÀÎ argv Àμö´Â ½ÇÇà½ÃŰ·Á´Â ÇÁ·Î±×·¥ÀÇ ¸ÞÀÎ ÇÔ¼ö¿¡ argv Àμö·Î½á Á¦°øÇϱâ À§ÇÑ °ªÀ¸·Î »ç¿ëµÈ ´Ù. ÀÌ ¹è¿­ÀÇ ¸¶Áö¸· ¿ä¼Ò´Â ¹Ýµå½Ã ³Î Æ÷ÀÎÅͰ¡ µÇ¾î¾ß¸¸ ÇÑ´Ù. °ü·Ê´ë·Î, ÀÌ ¹è¿­ÀÇ Ã¹ ¹øÂ° ¿ä ¼Ò´Â µð·ºÅ丮 À̸§ÀÌ ¾ø´Â ÇÁ·Î±×·¥ÀÇ ÆÄÀÏ À̸§ÀÌ´Ù. ¾î¶»°Ô ÇÁ·Î±×·¥ÀÌ ±×µé ÀμöµéÀ» ¾ï¼¼½ºÇÏ ´ÂÁö¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ °ÍÀº 22.1Àý [Program Arguments] 311 ÆäÀÌÁö ÂüÁ¶.

»õ·Î¿î ÇÁ·Î¼¼½º À̹ÌÁö¸¦ À§ÇÑ È¯°æÀº ÇöÀç ÇÁ·Î¼¼½º À̹ÌÁöÀÇ environ º¯¼ö·ÎºÎÅÍ È¹µæµÈ´Ù; ȯ°æ ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â 22.2Àý [Environment Variables] 317 ÆäÀÌÁö ÂüÁ¶.

ÇÔ¼ö : int execl (const char *filename, const char *arg(), . . .)

À̰ÍÀº execv¿Í À¯»çÇÏÁö¸¸, argv ¹®ÀÚ¿­Àº ¹è¿­ÀÌ ¾Æ´Ï¶ó °³º°ÀûÀ¸·Î Á¤ÇØÁ®ÀÖ´Ù. ³Î Æ÷ÀÎÅͰ¡ ¸¶ Áö¸· Àμö·Î ÁÖ¾îÁ®¾ß¸¸ ÇÑ´Ù.

ÇÔ¼ö :

int execve (const chat *filename, chat *const argv[], chat *const env[])

À̰ÍÀº execv¿Í À¯»çÇÏÁö¸¸, env Àμö¸¦ ÅëÇØ »õ·Î¿î ÇÁ·Î±×·¥À» À§ÇÑ È¯°æÀ» ¸í½ÃÀûÀ¸·Î ÁöÁ¤Çϵµ ·Ï Çã¿ëÇÑ´Ù. À̰ÍÀº environº¯¼ö¿Í °°Àº Çü½ÄÀ¸·Î½á, ¹®ÀÚ¿­ÀÇ ¹è¿­ÀÌ´Ù; 22.2.1 [Environment Access] 318 ÆäÀÌÁö ÂüÁ¶.

ÇÔ¼ö :

int execle (const char *filename, const char *arg(), char *const env[], . . .)

À̰ÍÀº execl°ú À¯»çÇÏÁö¸¸, ¸í½ÃÀûÀ¸·Î »õ·Î¿î ÇÁ·Î±×·¥À» À§ÇÑ È¯°æÀ» Á¤Çϵµ·Ï Çã¿ëÇÑ´Ù. ȯ°æ Àμö´Â ¸¶Áö¸· argv Àμö·Î½á Ç¥½ÃµÈ ³Î Æ÷ÀÎÅÍÀÇ µÚ¿¡ µû¸£°í, environ º¯¼ö¿Í °°Àº Çü½ÄÀ¸·Î ¹®ÀÚ ¿­ÀÇ ¹è¿­ÀÌ µÈ´Ù.

ÇÔ¼ö : int execvp (const char *filename, char *const argv[])

execvp ÇÔ¼ö´Â filename¿¡ ½½·¡½¬°¡ Æ÷ÇԵǾî ÀÖÁö ¾ÊÀ¸¸é filenameÀ¸·ÎºÎÅÍ ¿ÏÀüÇÑ ÆÄÀÏ À̸§À» ã ±âÀ§Çؼ­, PATH ȯ°æº¯¼ö¿¡ ÀÖ´Â µð·ºÅ丮¸¦ Ž»öÇÑ´Ù´Â Á¡À» Á¦¿ÜÇϰí´Â, execv ¿Í À¯»çÇÏ´Ù (22.2.2 [Standard Environment] 318 ÆäÀÌÁö ÂüÁ¶.). ÀÌ ÇÔ¼ö´Â »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ °÷¿¡¼­ ±×µéÀ» ã±â ¶§¹®¿¡, ½Ã½ºÅÛÀ¯Æ¿¸®Æ¼ ÇÁ·Î±×·¥µéÀ» ½ÇÇàÇϱ⿡´Â À¯¿ëÇÏ´Ù. ½©µéÀº »ç¿ëÀÚ°¡ ŸÀÌÇÎÇÑ Ä¿¸Çµå¸¦ ½ÇÇàÇϱâ À§Çؼ­ ±×°ÍÀ» »ç¿ëÇÑ´Ù.

ÇÔ¼ö : int execlp (const char *filename, const char *arg(), . . .)

ÀÌ ÇÔ¼ö´Â execvp ÇÔ¼öó·³ filename°ú °°Àº À̸§À» Ž»öÇÑ´Ù´Â Á¡À» Á¦¿ÜÇϰí´Â, execl ÇÔ¼ö¿Í °° ´Ù.

¼­·Î ¹Þ¾ÆµéÀÎ Àμö ¸®½ºÆ®¿Í ȯ°æ ¸®½ºÆ®ÀÇ Å©±â´Â ARG_MAX ¹ÙÀÌÆ® º¸´Ù Å©Áö ¾Ê¾Æ¾ß¸¸ÇÑ´Ù. 27.1Àý [General Limits] 369 ÆäÀÌÁö ÂüÁ¶. GNU½Ã½ºÅÛ¿¡¼­ Å©±â(ARG_MAX¿Í ºñ±³ÇÏ¿©)´Â °¢ ¹®ÀÚ ¿­¿¡¼­, ¹®ÀÚ¿­¾È¿¡ ÀÖ´Â ¹®ÀÚµéÀÇ °³¼ö¿¡ char *ÀÇ Å©±â¸¦ ´õÇϰí, char *ÀÇ Å©±âÀÇ ¹è¼ö·Î ¹Ý¿Ã¸² µÈ Çϳª¸¦ ´õÇÑ´Ù. ´Ù¸¥ ½Ã½ºÅÛµéÀº Å©±â¸¦ ¼ÀÇϱâ À§ÇÑ ´Ù¸¥ ±ÔÄ¢À» °®´Â´Ù.

±×µé ÇÔ¼öµéÀº ÀϹÝÀûÀ¸·Î ¸®ÅÏÇÏÁö ¾Ê´Â´Ù. ½ÇÆÐ°¡ ¹ß»ýÇϸé -1ÀÇ °ªÀ» ¸®ÅÏÇÑ´Ù. º¸ÅëÀÇ ÆÄÀÏ À̸§ ±¸¹® ¿¡·¯(6.2.3Àý [File Name Errors] 60 ÆäÀÌÁö ÂüÁ¶.)µé¿¡ ´õÇØ¼­, ´ÙÀ½ÀÇ errno´Â ÀÌ ±×µé ÇÔ¼öµéÀ» À§Çؼ­ Á¤ÀÇµÈ ¿¡·¯»óȲÀÌ´Ù.

E2BIG

»õ·Î¿î ÇÁ·Î±×·¥ÀÇ Àμö ¸®½ºÆ®¿Í ȯ°æ ¸®½ºÆ®ÀÇ °áÇÕµÈ Å©±â°¡ ARG_MAX ¹ÙÀÌÆ®º¸´Ù Å©´Ù. GNU ½Ã½ºÅÛÀº Àμö ¸®½ºÆ®ÀÇ Å©±â¿¡ ¾Æ¹«·± Á¦ÇÑÀ» µÎÁö ¾Ê±× ¶§¹®¿¡ ÀÌ ¿¡·¯°¡ ¹ß»ýÇÏÁö´Â ¾ÊÁö¸¸, ±× Àμö°¡ À¯¿ëÇÑ ¸Þ¸ð¸®ÀÇ Å©±âº¸´Ù Å©´Ù¸é ENOMENÀÇ ¿¡·¯´Â ¹ß»ýÇÒ °ÍÀÌ´Ù.

ENOEXEC

Á¤ÇØÁø ÆÄÀÏÀÌ ¿Ã¹Ù¸¥ Çü½ÄÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ½ÇÇàµÉ ¼ö ¾ø´Ù.

ENOMEM

Á¤ÇØÁø ÆÄÀÏÀ» ½ÇÇà½Ã۴µ¥´Â ÇöÀç À¯¿ëÇѰͺ¸´Ù ´õ ¸¹Àº °ø°£ÀÌ ÇÊ¿äÇÏ´Ù.

¸¸ÀÏ »õ·Î¿î ÆÄÀÏÀÇ ½ÇÇàÀÌ ¼º°øÇϸé, ±×°ÍÀº ¸¶Ä¡ ±× ÆÄÀÏÀ» ÀÐÀº °Í ó·³ ±× ÆÄÀÏÀÇ ¾ï¼¼½º ŸÀÓ Çʵå(access time field)¸¦ °»½ÅÇÑ´Ù. 9.8.9Àý[File Times] 140 ÆäÀÌÁö¸¦ ÂüÁ¶ÇÏ¿©, ÆÄÀÏÀÇ ¾ï¼¼½º Ÿ ÀÓ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾ò¾î¶ó. ±× ÆÄÀÏÀÌ Æó¼èµÈ ÁöÁ¡¿¡¼­ ´Ù½Ã ¾î¶²°Íµµ Á¤ÇØÁöÁö ¾Ê¾Ò´Ù¸é, ±× °ÍÀº ÇÁ·Î¼¼½º°¡ Á¾·áµÇ±â Àü¿¡³ª ´Ù¸¥ ÇÁ·Î¼¼½º À̹ÌÁö°¡ ½ÇÇàµÇ±â ÀüÀÎ ¾î¶² ÁöÁ¡ÀÌ´Ù.

»õ·Î¿î ÇÁ·Î¼¼½º À̹ÌÁö¸¦ ½ÇÇàÇÏ´Â °ÍÀº »õ·Î¿î À§Ä¡·Î Àμö¿Í ȯ°æ ¹®ÀÚ¿­À» º¹»çÇϰí, ¸Þ¸ð¸®ÀÇ ³»¿ëÀ» ¿ÏÀüÈ÷ ¹Ù²Ù´Â °ÍÀÌ´Ù. ±×·¯³ª ÇÁ·Î¼¼½ºÀÇ ¸¹Àº ´Ù¸¥ ¼Ó¼ºµéÀº º¯°æµÇÁö ¾Ê´Â´Ù.

둁 ÇÁ·Î¼¼½º ID ¿Í ºÎ¸ð ÇÁ·Î¼¼½º ID. 23.2Àý [Process Creation Concepts] 325 ÆäÀÌÁö ÂüÁ¶.

둁 ¼¼¼Ç°ú ÇÁ·Î¼¼½º ±×·ì ¸â¹ö½±. 24.1Àý [Concepts of Job Control] 335 ÆäÀÌÁö ÂüÁ¶.

둁 ½Ç »ç¿ëÀÚ ID ¿Í ±×·ì ID, ±×¸®°í ºÎ¼öÀûÀÎ ±×·ì IDµé. 25.2Àý [Process Presona] 353 ÆäÀÌÁö ÂüÁ¶.

둁 ¹ÌÇØ°á»óÅÂÀÎ ¾Ë¶÷µé. 17.3Àý [Setting an Alarm] 243 ÆäÀÌÁö ÂüÁ¶.

둁 ÇöÀç ÀÛ¾÷ÁßÀÎ µð·ºÅ丮¿Í ·çÆ® µð·ºÅ丮. 9.1Àý [Working Directory] 123 ÆäÀÌÁö ÂüÁ¶.

둁 ÆÄÀÏ ¸ðµå »ý¼º ¸¶½ºÅ©. 9.8.7Àý [Setting Permissions] 137 ÆäÀÌÁö ÂüÁ¶.

둁 ÇÁ·Î¼¼½º ½Ã±×³¯ ¸¶½ºÅ©; 21.7.3Àý [Process Signal Mask] 300 ÆäÀÌÁö ÂüÁ¶.

둁 ¹ÌÇØ°á»óÅÂÀÎ ½Ã±×³¯µé; 21.7Àý [Blocking Signals] 298 ÆäÀÌÁö ÂüÁ¶.

둁 ÇÁ·Î¼¼½º¿Í ¿¬°üµÈ °æ°úµÈ ÇÁ·Î¼¼½º ½Ã°£; 17.1Àý [Processor Time] 253 ÆäÀÌÁö ÂüÁ¶.

¸¸ÀÏ ÇÁ·Î¼¼½º À̹ÌÁö ÆÄÀÏÀÇ set-user-ID ¿Í set-group-ID ¸ðµå ºñÆ®°¡ ¼³Á¤µÇ¸é, À̰ÍÀº ÇÁ·Î¼¼ ½ºÀÇ À¯È¿ »ç¿ëÀÚ ID¿Í À¯È¿ ±×·ì ID¿¡°Ô ¿µÇâÀ» ¹ÌÄ£´Ù. ±×·¯ÇÑ °³³äµéÀº 25.2Àý [Process Persona] 353 ÆäÀÌÁö¿¡ »ó¼¼ÇÏ°Ô ¼³¸íµÇ¾î ÀÖ´Ù.

ÇöÁ¸ÇÏ´Â ÇÁ·Î¼¼½º À̹ÌÁö¿¡¼­ ¹«½ÃµÇµµ·Ï ¼³Á¤µÈ ½Ã±×³¯µéÀº »õ·Î¿î ÇÁ·Î¼¼½º À̹ÌÁö¿¡¼­µµ ¶ÇÇÑ ¹«½ÃµÇµµ·Ï ¼³Á¤µÈ´Ù. ¸ðµç ´Ù¸¥ ½Ã±×³¯µéÀº »õ·Î¿î ÇÁ·Î¼¼½º À̹ÌÁö¿¡¼­ µðÆúÆ® µ¿ÀÛÀ¸·Î ¼³Á¤µÈ ´Ù. ½Ã±×³¯¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸´Â, 21Àå [Signal Handling] 271 ÆäÀÌÁö¸¦ ÂüÁ¶Ç϶ó.

½ÇÇàÁßÀÎ ÇÁ·Î¼¼½º À̹ÌÁö¿¡¼­ °³¹æÇÑ ÆÄÀÏ ±â¼úÀÚµéÀº, ±×µéÀÌ FD_CLOEXEC (close-on-exec) Çà ·¡±×¸¦ ¼³Á¤ÇÏÁö ¾Ê´Â´Ù¸é, »õ·Î¿î ÇÁ·Î¼¼½º À̹ÌÁö¿¡¼­µµ °³¹æµÈü·Î ³²°ÜÁø´Ù. °³¹æµÈ »óÅ·Π³² °ÜÁø ÆÄÀϵéÀº ½ÇÇàÁßÀÎ ÇÁ·Î¼¼½º À̹ÌÁö·ÎºÎÅÍ ÆÄÀÏ ¶ôµéÀ» Æ÷ÇÔÇÑ, °³¹æ ÆÄÀÏ ±â¼úÀǸðµç ¼Ó¼ºÀ» »ó¼Ó¹Þ´Â´Ù. ÆÄÀÏ ±â¼úÀÚ´Â 8Àå [Low-Level I/O] 103 ÆäÀÌÁö¿¡ »ó¼¼ÇÏ°Ô ¼³¸íµÇ¾î ÀÖ´Ù.

ÆÄÀϰú ºñ±³ÇÏ¿© ½ºÆ®¸²Àº, exec ÇÔ¼öµéÀ» ÅëÇØ¼­µµ »ì¾Æ³²Áö ¸øÇÑ´Ù, ¿Ö³ÄÇÏ¸é ±×µéÀº ÇÁ·Î¼¼½º ÀÚüÀÇ ¸Þ¸ð¸®¾È¿¡ À§Ä¡Çϰí Àֱ⠶§¹®ÀÌ´Ù. »õ·Î¿î ÇÁ·Î¼¼½º À̹ÌÁö´Â ±×µéÀÌ »õ·Ó°Ô ¸¸µç ½ºÆ®¸² À» Á¦¿ÜÇϰí´Â ¾Æ¹«·± ½ºÆ®¸²µµ °®Áö¾Ê´Â´Ù. pre-execÇÁ·Î¼¼½º À̹ÌÁö¾È¿¡ ÀÖ´Â ½ºÆ®¸²µéÀÇ °¢°¢Àº ±× ³»ºÎ¿¡ ±â¼úÀÚ¸¦ °®°íÀÖ°í, ±×µé ±â¼úÀÚ´Â execÀ» ÅëÇØ¼­ »ì¾Æ³²´Â´Ù. (±×µéÀº FD_CLOEXECÀÇ ¼³Á¤À» °¡ÁöÁö ¾Ê°í Á¦°øµÈ°Í. »õ·Î¿î ÇÁ·Î¼¼½º À̹ÌÁö´Â fdopenÀ» »ç¿ëÇØ¼­ »õ·Î¿î ½ºÆ®¸²¿¡ ±×µé À» À翬°á ÇÒ ¼ö ÀÖ´Ù. (8.4Àý [Descriptors and Streams] 108 ÆäÀÌÁö ÂüÁ¶.))

23.6 ÇÁ·Î¼¼½º Á¾·á.

ÀÌ Àý¿¡¼­ ¼³¸íÇϰí ÀÖ´Â ÇÔ¼öµéÀº ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Á¾·áÇϰųª ¸ØÃßµµ·Ï ±â´Ù¸®´Âµ¥ »ç¿ëµÇ°í, ±× ·¯ÇÑ »óȲÀÎÁöÀÇ ¿©ºÎ¸¦ ¾Ë¾Æº¸´Âµ¥ »ç¿ëµÈ´Ù. ±×µé ÇÔ¼öµéÀº Çì´õÆÄÀÏ `sys/wait.h'¿¡ ¼±¾ðµÇ¾î ÀÖ ´Ù.

ÇÔ¼ö : pid_t waitpid (pid_t pid, int *status_ptr, int options)

waitpid ÇÔ¼ö´Â ÇÁ·Î¼¼½º ID¸¦ pid·Î °¡Áø ÀÚ½Ä ÇÁ·Î¼¼½º·ÎºÎÅÍ »óȲ Á¤º¸¸¦ ¿äûÇϴµ¥ »ç¿ëµÈ´Ù. ÀϹÝÀûÀ¸·Î, È£ÃâµÈ ÇÁ·Î¼¼½º´Â ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Á¾·áµÊÀ¸·Î½á À¯¿ëÇÑ »óȲÁ¤º¸¸¦ ¸¸µé¶§±îÁö Àá½Ã ÁßÁöµÇ¾î ÀÖ´Ù.

pid Àμö¸¦ À§ÇÑ ´Ù¸¥°ªµéÀº Ưº°ÇÑ ¶æÀ» °®´Â´Ù. -1ÀÇ °ªÀ̳ª WAIT_ANY´Â ¾î¶² ÀÚ½Ä ÇÁ·Î¼¼½º ¸¦ À§ÇÑ »óȲÁ¤º¸¸¦ ¿äûÇÑ´Ù; 0ÀÇ °ªÀ̳ª WAIT_MYPGRP´Â È£ÃâµÈ ÇÁ·Î¼¼½º¿Í °°Àº ÇÁ·Î¼¼½º ±× ·ì¿¡ ÀÖ´Â ¾î¶² ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ À§ÇÑ Á¤º¸¸¦ ¿äûÇÑ´Ù; ±×¸®°í ´Ù¸¥ À½¼ö°ª - pgid´Â ÇÁ·Î¼¼½º ±× ·ì ID·Î½á pgid¸¦ °¡Áø ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ À§ÇÑ Á¤º¸¸¦ ¿äûÇÑ´Ù.

¸¸ÀÏ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ À§ÇÑ »óȲÁ¤º¸°¡ Áï½Ã À¯¿ëÇÑ »óŶó¸é, ÀÌ ÇÔ¼ö´Â ±â´Ù¸²ÀÌ ¾øÀÌ Áï½Ã ¸®ÅÏ ÇÑ´Ù. ¸¸ÀÏ ÇÑ °³ÀÇ ÀûÇÕÇÑ ÀÚ½Ä ÇÁ·Î¼¼½ºº¸´Ù ¸¹Àº ÇÁ·Î¼¼½º°¡ À¯¿ëÇÑ »óȲ Á¤º¸¸¦ °®°íÀÖ´Ù¸é, ±× µÑÁßÀÇ Çϳª°¡ ÀÓÀÇ·Î ¼±Åõǰí, ±× »óȲÀº Áï½Ã ¸®ÅϵȴÙ. ´Ù¸¥ ÀûÇÕÇÑ ÀÚ½Ä ÇÁ·Î¼¼½º·ÎºÎÅÍ »óȲÀ» ¾ò±âÀ§Çؼ­, ´ç½ÅÀº waitpid¸¦ ´Ù½Ã È£ÃâÇÒ Çʿ䰡 ÀÖ´Ù.

options Àμö´Â ºñÆ® ¸¶½ºÅ©ÀÌ´Ù. ±× °ªÀº 0À̳ª WNOHANG¿Í WUNTRACED Ç÷¡±×µéÀÌ ºñÆ®º° OR·Î Á¶ÇյǾîÁú °ÍÀÌ´Ù. ´ç½ÅÀº ºÎ¸ð ÇÁ·Î¼¼½º°¡ ±â´Ù¸®Áö ¾ÊÀ»°ÍÀÓÀ» ÁöÀûÇϱâ À§Çؼ­ WNOHANG Ç÷¡±×¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù; ±×¸®°í WUNTRACEDÇ÷¡±×´Â Á¾·áµÈ ÇÁ·Î¼¼½º »Ó¸¸¾Æ´Ï ¶ó ¸ØÃß¾îÁø ÇÁ·Î¼¼½ºµé·Î ºÎÅÍ »óȲ Á¤º¸¸¦ ¿äûÇϱâ À§Çؼ­ »ç¿ëµÇ¾îÁø´Ù.

ÀÚ½Ä ÇÁ·Î¼¼½º·ÎºÎÅÍÀÇ »óȲÁ¤º¸´Â status_ptrÀÌ ³Î Æ÷ÀÎÅͰ¡ ¾Æ´Ï¶ó¸é, status_ptrÀÌ °¡¸®Å°°í ÀÖ´Â ¿ÀºêÁ§Æ® ¾È¿¡ ÀúÀåµÈ´Ù. ¸®ÅϰªÀº º¸Åë º¸°íµÈ »óȲÀ» °¡Áø ÀÚ½Ä ÇÁ·Î¼¼½ºÀÇ ÇÁ·Î¼¼½º ID °¡ µÈ ´Ù. ¸¸ÀÏ WNOHANG ¿É¼ÇÀÌ ÁöÁ¤µÆ°í ¾î¶² ÀÚ½Ä ÇÁ·Î¼¼½ºµµ ±â´Ù¸®°í ÀÖÁö ¾Ê´Ù¸é, ±× °ªÀº 0ÀÌ µÈ´Ù. ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì¿¡ -1À» ¸®ÅÏÇÑ´Ù. ´ÙÀ½ÀÇ errno´Â ÀÌ ÇÔ¼ö¸¦ À§Çؼ­ Á¤ÀÇµÈ ¿¡·¯»óȲÀÌ ´Ù.

EINTR

±× ÇÔ¼ö´Â È£ÃâµÈ ÇÁ·Î¼¼½º¿¡°Ô ¹è´ÞµÈ ½Ã±×³¯¿¡ ÀÇÇØ ÀÎÅÍ·´Æ®µÇ¾îÁ³´Ù. 21.5Àý [Interrupted Primitives] 293 ÆäÀÌÁö ÂüÁ¶.

ECHILD

±×°÷¿¡ ±â´Ù¸®°í ÀÖ´Â ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ¾Æ¹«°Íµµ ¾ø°Å³ª, Á¤ÇØÁø pid°¡ È£ÃâµÈ ÇÁ·Î¼¼½ºÀÇ ÀÚ½ÄÇÁ·Î ¼¼½º°¡ ¾Æ´Ï´Ù.

EINVAL

¿Ã¹Ù¸£Áö ¸øÇÑ °ªÀÌ options Àμö·Î½á °ø±ÞµÇ¾ú´Ù.

´ÙÀ½ ±âÈ£ »ó¼öµéÀº waitpid ÇÔ¼ö¿¡°Ô pid Àμö¸¦ À§ÇÑ °ªÀ¸·Î½á Á¤ÀǵǾú´Ù.

WAIT_ANY

ÀÌ »ó¼ö ¸ÅÅ©·Î´Â waitpid°¡ ¾î´À ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ´ëÇÑ »óȲÁ¤º¸¸¦ ¸®ÅÏÇϵµ·Ï ÁöÁ¤µÇ¾ú´Ù.(°ªÀº -1)

WAIT_MYPGRP

ÀÌ »ó¼ö´Â(°ªÀº 0) È£ÃâµÈ ÇÁ·Î¼¼½º¿Í °°Àº ÇÁ·Î¼¼½º ±×·ì ¾È¿¡ ÀÖ´Â ¾î¶² ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ´ëÇÑ »ó ȲÁ¤º¸¸¦ ¸®ÅÏ Çϵµ·Ï ÁöÁ¤µÇ¾ú´Ù.

´ÙÀ½ÀÇ ±âÈ£ »ó¼öµéÀº waitpid ÇÔ¼öÀÇ options Àμö¸¦À§ÇÑ Ç÷¡±×·Î½á Á¤ÀǵǾú´Ù. ´ç½ÅÀº ±×µéÀº ºñÆ®º°-OR ¿¬»êÀ» ÅëÇØ¼­ Á¶ÇÕÇÒ ¼ö ÀÖ´Ù.

WNOHANG

ÀÌ Ç÷¡±×´Â ¸¸Àϱװ÷¿¡ ÁغñµÈ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ¾ø´Ù¸é, waitpid°¡ ±â´Ù¸®Áö ¾Ê°í Áï½Ã ¸®ÅÏÇϵµ·Ï ÁöÁ¤µÇ¾ú´Ù.

WUNTRACED

ÀÌ Ç÷¡±×´Â Á¾·áµÈ °Í »Ó¸¸¾Æ´Ï¶ó ¸ØÃß¾îÁø ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ´ëÇÑ »óȲÀ» º¸°íÇϵµ·Ï ÁöÁ¤µÇ¾ú´Ù.

ÇÔ¼ö : pid_t wait (int *status_ptr)

ÀÌ ÇÔ¼ö´Â waitpidÀÇ °£¼ÒÈ­µÈ º¯ÇüÀ̰í, ¾î¶² ÇÑ °³ÀÇ ÀÚ½Ä ÇÁ·Î ¼¼½º°¡ Á¾·áµÉ¶§±îÁö ±â´Ù¸®´Âµ¥ »ç¿ëµÈ´Ù. È£ÃâÀº:

wait (&status)

´Â Á¤È®È÷ ´ÙÀ½°ú µ¿µîÇÏ´Ù:

waitpid (-1, &status, 0)

´ÙÀ½Àº ±â´Ù¸²ÀÌ ¾øÀÌ, Á¾·áµÈ ¸ðµç ÀÚ½Ä ÇÁ·Î¼¼½º¿¡¼­ º¸³»¿Â »óȲÀ» ¾ò±â À§Çؼ­´Â waitpid¸¦ ¾î ¶»°Ô »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇÑ ¿¹Á¦°¡ ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â SIGCHLD ½Ã±×³¯À» À§ÇÑ Çڵ鷯·Î½á ¸¸µé¾îÁ³´Â µ¥, ±× ½Ã±×³¯Àº Àû¾îµµ ÇÑ °³ÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Á¾·áµÇ¾úÀ½À» ¾Ë¸®±â À§Çؼ­ ¹ß»ýµÈ´Ù.

void

sigchld_handler (int signum)

{

int pid;

int status;

while (1)

{

pid = waitpid (WAIT_ANY, &status, WNOHANG);

if (pid < 0)

{

perror ("waitpid");

break;

}

if (pid == 0)

break;

notice_termination (pid, status);

}

}

23.7 ÇÁ·Î¼¼½º Á¾·á »óȲµé.

¸¸ÀÏ ÀÚ½Ä ÇÁ·Î¼¼½ºÀÇ Á¾·á »óȲ °ª(22.3Àý [Program Termination] 320ÆäÀÌÁö ÂüÁ¶.)ÀÌ 0À̸é, waitpid ¶Ç´Â wait¿¡ ÀÇÇØ º¸°íµÈ »óȲ °ª ¶ÇÇÑ 0ÀÌ´Ù. ´ç½ÅÀº ´ÙÀ½ÀÇ ¸ÅÅ©·Î¸¦ »ç¿ëÇØ¼­ ¸®ÅÏµÈ »óȲ°ª¾È¿¡ ÀÖ´Â ¾ÏȣȭµÈ Á¤º¸¸¦ Å×½ºÆ®ÇÒ ¼ö ÀÖ´Ù.

¸ÅÅ©·Î : int WIFEXITED (int status)

ÀÌ ¸ÅÅ©·Î´Â ¸¸ÀÏ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ exit ¶Ç´Â _exit·Î½á Á¤»óÀûÀ¸·Î Á¾·áµÇ¸é 0ÀÌ ¾Æ´Ñ°ªÀ» Áö´Ñ´Ù.

¸ÅÅ©·Î : int WEXITSTATUS (int status)

¸¸ÀÏ status°¡ ÂüÀÎ »óÅÂÀÇ WIFEXITEDÀ̸é, ÀÌ ¸ÅÅ©·Î´Â ÀÚ½ÄÇÁ·Î¼¼½º·ÎºÎÅÍÀÇ Á¾·á »óȲ °ªÀÇ ÇÏ À§ 8ºñÆ®¸¦ ¸®ÅÏÇÑ´Ù. 22.3.2Àý [Exit Status] 320 ÆäÀÌÁö ÂüÁ¶.

¸ÅÅ©·Î : int WIFSIGNALED (int status)

ÀÌ ¸ÅÅ©·Î´Â ¸¸ÀÏ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ 󸮵ÇÁö¾ÊÀº ½Ã±×³¯À» ¹Þ¾Ò±â ¶§¹®¿¡ Á¾·áµÇ¾ú´Ù¸é 0ÀÌ ¾Æ´Ñ°ª À» ¸®ÅÏÇÑ´Ù. 21Àå [Signal Handling] 271 ÆäÀÌÁö ÂüÁ¶.

¸ÅÅ©·Î : int WTERMSIG (int status)

¸¸ÀÏ status°¡ ÂüÀÎ WIFSEGNALEDÀ̸é, ÀÌ ¸ÅÅ©·Î´Â ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ Á¾·á½ÃÄ×´ø ½Ã±×³¯ÀÇ ½Ã±× ³¯ ¹øÈ£¸¦ ¸®ÅÏÇÑ´Ù.

¸ÅÅ©·Î : int WCOREDUMP (int status)

ÀÌ ¸ÅÅ©·Î´Â ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Á¾·áµÇ°í ÄھƴýÇÁ¸¦ »ý¼ºÇß´Ù¸é, 0ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÑ´Ù.

¸ÅÅ©·Î : int WIFSTOPPED (int status)

ÀÌ ¸ÅÅ©·Î´Â ¸¸ÀÏ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ¸ØÃß¾îÁ®ÀÖ´Ù¸é 0ÀÌ ¾Æ´Ñ°ªÀ» ¸®ÅÏÇÑ´Ù.

¸ÅÅ©·Î : int WSTOPSIG (int status)

¸¸ÀÏ status°¡ ÂüÀÎ WIFSTOPPED À̸é, ÀÌ ¸ÅÅ©·Î´Â ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸ØÃß°ÔÇÑ ¿øÀÎÀÌ µÈ ½Ã±×³¯ ÀÇ ½Ã±×³¯ ¹øÈ£¸¦ ¸®ÅÏÇÑ´Ù.

23.8 BSD ÇÁ·Î¼¼½º Wait ÇÔ¼öµé.

GNU ¶óÀ̺귯¸®´Â BSD À¯´Ð½º¿ÍÀÇ È£È¯¼ºÀ» À§Çؼ­ ±×µé°ú ¿¬°üµÈ ±â´ÉµéÀ» Á¦°øÇÑ´Ù. BSD´Â int ¿Í ´Ù¸£°Ô »óȲ°ªÀ» Ç¥ÇöÇÏ´Â union wait µ¥ÀÌÅÍ Å¸ÀÔÀ» »ç¿ëÇÑ´Ù. µÎ °³ÀÇ Ç¥ÇöÀº ½ÇÁ¦·Î »óÈ£ °£¿¡ º¯°æ°¡´ÉÇÏ´Ù; ±×µéÀº µ¿ÀÏÇÑ ºñÆ® ÆÐÅÏÀ» Ç¥ÇöÇϱ⠶§¹®ÀÌ´Ù. WEXITSTATUS ¿Í °°Àº ¸Å Å©·Î¸¦ Á¤ÀÇÇϰí ÀÖ´Â GNU C ¶óÀ̺귯¸®´Â ¿ÀºêÁ§Æ®ÀÇ µÑÁß ÇÑ Á¾·ù¸¦ ¼±ÅÃÇØ¼­ ÀÛ¾÷ÇÒ°ÍÀ̰í, wait ÇÔ¼ö´Â status_ptr Àμö·Î½á Æ÷ÀÎÅÍÀÇ ÇÑÁ¾·ù¸¦ ¹Þ¾ÆµéÀ̵µ·Ï Á¤ÀǵȴÙ. ±×µé ÇÔ¼öµéÀº `sys/wait.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.

µ¥ÀÌÅÍ Å¸ÀÔ : union wait

ÀÌ µ¥ÀÌÅÍ Å¸ÀÔÀº ÇÁ·Î±×·¥ Á¾·á »óȲ °ªµéÀ» Ç¥ÇöÇϰí, ´ÙÀ½°ú °°Àº ¸â¹öµéÀ» °®´Â´Ù.

int w_termsig

ÀÌ ¸â¹öÀÇ °ªÀº ¸ÅÅ©·Î WTERMSIGÀÇ °á°ú¿Í °°´Ù.

int w_coredump

ÀÌ ¸É¹öÀÇ °ªÀº ¸ÅÅ©·Î WCOREDUMPÀÇ °á°ú¿Í °°´Ù.

int w_retcode

ÀÌ ¸É¹öÀÇ °ªÀº ¸ÅÅ©·Î WEXITSTATUSÀÇ °á°ú¿Í °°´Ù.

int w_stopsig

ÀÌ ¸É¹öÀÇ °ªÀº ¸ÅÅ©·Î WSTOPSIGÀÇ °á°ú¿Í °°´Ù.

Á÷Á¢ÀûÀ¸·Î ÀÌ ¸É¹öµéÀ» ¾ï¼¼½ºÇÏ´Â ´ë½Å¿¡, ´ç½ÅÀº µ¿µîÇÑ ¸ÅÅ©·Î ¸¦ »ç¿ëÇϵµ·Ï Ç϶ó.

ÇÔ¼ö:

pid_t wait3 (union wait *status_ptr, int options, struct rusage *usage)

usage°¡ ³Î Æ÷ÀÎÅͶó¸é, wait3´Â waitpid(-1, status`ptr, options)¿Í °°´Ù. ¸¸ÀÏ usage°¡ ³Î Æ÷ÀÎÅÍ °¡ ¾Æ´Ï¶ó¸é, wait3´Â *rusage¿¡ ÀÖ´Â ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ À§ÇÑ »ç¿ë ÇüŸ¦ ÀúÀåÇÑ´Ù(±×·¯³ª ¿ÀÁ÷ ¸Ø Ãß¾î ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó, Á¾·áµÈ ÀÚ½Ä ÇÁ·Î¼¼½º¶ó¸é.)17.5Àý [Resource Usage] 245 ÆäÀÌÁö ÂüÁ¶.

ÇÔ¼ö :

pid_t wait4 (pid_t pid, union wait *status_ptr, int options, struct rusage *usage)

¸¸ÀÏ usage°¡ ³Î Æ÷ÀÎÅͶó¸é, wait4´Â waitpid (pid, status`ptr, options)¿Í °°´Ù. ¸¸ÀÏ usage°¡ ³Î Æ÷ÀÎÅͰ¡ ¾Æ´Ï¶ó¸é, wait4´Â *rusage¿¡ ÀÖ´Â ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ À§ÇÏ¿© »ç¿ë ÇüŵéÀ» ÀúÀåÇÑ´Ù. (±×·¯ ³ª ¿ÀÁ÷ ÀÚ½Ä ÇÁ·Î¼¼½º´Â ¸ØÃß¾î ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó, Á¾·áµÈ °ÍÀÌ´Ù.) 17.5Àý [Resource Usage] 254 ÆäÀÌÁö ÂüÁ¶.

23.9 ÇÁ·Î¼¼½º ¸¸µé±â ¿¹Á¦.

´ÙÀ½Àº ³»Àå ½Ã½ºÅÛ°ú À¯»çÇÑ ÇÔ¼ö¸¦ ¾î¶»°Ô ¸¸µé°ÍÀÎÁö¸¦ º¸¿©ÁÖ´Â ¿¹Á¦ ÇÁ·Î±×·¥ÀÌ´Ù. ±×°ÍÀº `sh -c command'¿Í µ¿µîÇÑ °ÍÀ» »ç¿ëÇÏ¿© command Àμö¸¦ ½ÇÇàÇÑ´Ù.

#include <stddef.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/wait.h>

/* ½© ÇÁ·Î±×·¥À» »ç¿ëÇØ¼­ command ¸¦ ½ÇÇàÇÑ´Ù. */

#define SHELL "/bin/sh"

int

my_system (const char *command)

{

int status;

pid_t pid;

pid = fork ();

if (pid == 0)

{

/* À̰ÍÀº ÀÚ½Ä ÇÁ·Î¼¼½º·Î½á ½© Ä¿¸Çµå¸¦ ½ÇÇàÇÑ´Ù. */

execl (SHELL, SHELL, "-c", command, NULL);

_exit (EXIT_FAILURE);

}

else if (pid < 0)

/* fork°¡ ½ÇÆÐÇÏ¿´À¸¹Ç·Î ½ÇÆÐ¸¦ º¸°íÇ϶ó. */

status = -1;

else

/* À̰ÍÀº ºÎ¸ð ÇÁ·Î¼¼½º·Î½á, ÀÚ½ÄÀÌ ¼öÇàÀ» ¿Ï·áÇÒ ¶§±îÁö ±â´Ù¸°´Ù. */

if (waitpid (pid, &status, 0) != pid)

status = -1;

return status;

}

´ç½ÅÀÌ ÀÌ ¿¹Á¦¿¡¼­ ÁÖ¸ñÇØ¾ß ÇÒ°ÍÀÌ µÎ°¡Áö ÀÖ´Ù. ÇÁ·Î±×·¥¿¡ °ø±ÞµÈ ù ¹øÂ° argv Àμö´Â ½ÇÇà ½ÃŰ·Á´Â ÇÁ·Î±×·¥ÀÇ À̸§À» Ç¥ÇöÇÑ´Ù´Â °ÍÀ» ±â¾ïÇ϶ó. ±×°ÍÀº execlÀÇ È£Ãâ¿¡¼­, SHELL¿¡°Ô ÀÏ ´Ü ½ÇÇàÇÏ·Á´Â ÇÁ·Î±×·¥ÀÇ À̸§ÀÌ ÁÖ¾îÁö°í µÎ ¹øÂ°·Î argv[0]¸¦ À§ÇÑ °ªÀ» °ø±ÞÇÏ´Â ÀÌÀ¯ÀÌ´Ù.

ÀÚ½Ä ÇÁ·Î¼¼½º¿¡¼­ execl È£ÃâÀº ¸¸ÀÏ ±×°ÍÀÌ ¼º°øÇÏ¸é ¸®ÅÏÇÏÁö ¾Ê´Â´Ù. ¸¸ÀÏ ±×°ÍÀÌ ½ÇÆÐÇϸé, ´ç½ÅÀº ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Á¾·áµÇµµ·Ï ¹«¾ùÀΰ¡¸¦ ÇØ¾ß¸¸ ÇÑ´Ù. ´ÜÁö returnÀ» ÅëÇÏ¿© ³ª»Û »óȲ ÄÚ µå¸¸À» ¸®ÅÏÇÏ´Â °ÍÀº ¿ø·¡ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ´ø µÎ°³ÀÇ ÇÁ·Î¼¼½º¸¦ ±×³É ³²±â°Ô µÈ´Ù. ´ë½Å¿¡, ¿Ã¹Ù¸¥ 󸮴 ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ½ÇÆÐ¸¦ º¸°íÇÏ´Â °ÍÀÌ´Ù.

±×°ÍÀ» ¼öÇàÇϵµ·Ï -exit¸¦ È£ÃâÇ϶ó. exit ´ë½Å¿¡ _exit¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯´Â stdout¿Í °°Àº ¿ÏÀüÈ÷ ¹öÆÛÈ­µÈ ½ºÆ®¸²µéÀ» Ç÷¯½¬ ÇÏ´Â °ÍÀ» ÇÇÇϱâ À§ÇÔÀÌ´Ù. ¾Æ¸¶µµ µ¥ÀÌÅ͸¦ ´ã°í ÀÖ´Â ±×µé ½ºÆ®¸² ÀÇ ¹öÆÛµéÀº fork¿¡ ÀÇÇØ ºÎ¸ð ÇÁ·Î¼¼½º·ÎºÎÅÍ º¹»çµÈ °ÍÀ̰í, µ¥ÀÌÅÍ´Â ºÎ¸ð ÇÁ·Î¼¼½º¿¡ ÀÇÇØ °á±¹ Ãâ·ÂµÉ °ÍÀÌ´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º¿¡¼­ È£ÃâµÈ exit´Â µ¥ÀÌÅ͸¦ µÎ ¹ø Ãâ·ÂÇÒ °ÍÀÌ´Ù. 22.3.5Àý [Termination Internals] 322 ÆäÀÌÁö ÂüÁ¶.