CLONE

Section: Linux Programmer's Manual (2)
Updated: 25 april 1998
Index
Return to Main Contents
 

À̸§

__clone - ÇÁ·Î¼¼½º »ý¼º  

»ç¿ë¹ý

#include <sched.h>

int __clone(int (*fn) (void *arg), void *child_stack, int flags, void *arg)  

¼³¸í

__clone ´Â fork(2) ó·³ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÑ´Ù. fork(2) ¿Í´Â ´Þ¸®, __clone Àº ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ¸Þ¸ð¸® °øÀ¯, ÆÄÀÏ ±â¼úÀÚµéÀÇ Å×À̺í, ½Ã±×³Î Çڵ鷯ÀÇ Å×À̺í°ú °°ÀÌ ±× ºÎ¸ð ÇÁ·Î¼¼½º¿Í ÇÔ²² ½ÇÇà ¹®¸ÆÀÇ ºÎºÐµéÀ» °øÀ¯Çϵµ·Ï Çã¿ëÇÑ´Ù. __cloneÀÇ ÁÖµÈ »ç¿ëÀº ¾²·¹µå¸¦ ±¸ÇöÇÏ´Â °ÍÀÌ´Ù. °øÀ¯ ¸Þ¸ð¸®¿¡¼­ µ¿½Ã¿¡ ½ÇÇàÇÏ´Â ÇÁ·Î±×·¥¿¡¼­ ¸ÖƼ ¾²·¹µåÀÇ Á¦¾î. ÀÚ½Ä ÇÁ·Î¼¼½º°¡ »ý¼ºµÇ¸é, ÀÌ´Â ÇÔ¼ö ¾îÇø®ÄÉÀ̼ÇÀ» ½ÇÇà½ÃŲ´Ù. fn(arg). fn Àμö´Â ½ÇÇà Ãʱ⿡ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ÀÇÇØ È£ÃâµÇ´Â ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ´Ù. arg ´Â fn ¿¡ ´Ù½Ã Àü´ÞµÇ´Â ÀμöÀÌ´Ù. fn(arg) ÇÔ¼ö ¾îÇø®ÄÉÀ̼ÇÀÌ ¸®ÅÏÇϸé, ÀÚ½Ä ÇÁ·Î¼¼½º´Â Á¾·áµÈ´Ù. fn ¿¡ ÀÇÇØ ¸®ÅϵǴ integer´Â ÀÚ½ÄÇÁ·Î¼¼½º°¡ ºüÁ®³ª°¡´Â exitÄÚµåÀÌ´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º´Â exit(1) À» È£ÃâÇϰųª, fatal ½Ã±×³ÎÀ» ¹ÞÀº ÈÄ¿¡ ¸í¹éÇÏ°Ô Á¾·áµÉ ¼ö ÀÖ´Ù. child_stack Àμö´Â ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ÀÇÇØ »ç¿ëµÇ´Â ½ºÅÃÀÇ À§Ä¡¸¦ ¸í½ÃÇÑ´Ù. ÀÚ½Ä ¹× ºÎ¸ð ÇÁ·Î¼¼½º°¡ ¸Þ¸ð¸®¸¦ °øÀ¯ÇÒ ¼ö Àֱ⶧¹®¿¡, ÀϹÝÀûÀ¸·Î ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ºÎ¸ðÇÁ·Î¼¼½º¿Í µ¿ÀÏÇÑ ½ºÅà ¿¡¼­ ½ÇÇàµÇ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ºÎ¸ð ÇÁ·Î¼¼½º´Â µû¶ó¼­ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ À§ÇÑ ¸Þ¸ð¸®¸¦ ¼³Á¤ÇØ¾ß Çϸç, __clone ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ Àü´ÞÇØ¾ß ÇÑ´Ù. ¸®´ª½º¸¦ ½ÇÇàÇÏ´Â ¸ðµç ÇÁ·Î¼¼¼­(HP PA ÇÁ·Î¼¼¼­ Á¦¿Ü)µé »ó¿¡¼­ ½ºÅÃÀº ¾Æ·¡ÂÊÀ¸·Î ½×À̹ǷÎ, child_stack Àº ÀÚ½Ä ½ºÅÃÀ» À§ÇÑ ¼³Á¤¿¡ º¸Åë ¸Þ¸ð¸® °ø°£ÀÇ »óÀ§ ÁÖ¼Ò¸¦ °¡¸®Å²´Ù. ÀûÀº ¹ÙÀÌÆ®ÀÇ flags ´Â ÀÚ½ÄÀÌ Á×À» ¶§ ºÎ¸ð¿¡°Ô Àü¼ÛµÇ´Â ½Ã±×³ÎÀÇ ¹øÈ£¸¦ Æ÷ÇÔÇÑ´Ù. flags ´Â ¶ÇÇÑ ºÎ¸ð¿Í ÀÚ½Ä ÇÁ·Î¼¼½º »çÀÌ¿¡ ¹«¾ùÀÌ °øÀ¯µÇ´Â°¡¸¦ ¸í½ÃÇϱâ À§Çؼ­ ´ÙÀ½ÀÇ »ó¼öµé Áß Çϳª ȤÀº ¸î°¡Áö¸¦ bitwiseÇÒ ¼ö ÀÖ´Ù.
CLONE_VM
¸¸ÀÏ CLONE_VM ÀÌ ¼³Á¤µÇ¸é, ºÎ¸ð¿Í ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀº µ¿ÀÏÇÑ ¸Þ¸ð¸® °ø°£¿¡¼­ ½ÇÇàµÈ´Ù. ƯÈ÷, ºÎ¸ð ÇÁ·Î¼¼½º ȤÀº ÀÚ½Ä ÇÁ·Î¼¼½ºµé¿¡ ÀÇÇØ ¼öÇàµÇ´Â ¸Þ¸ð¸® ÀÛ¼ºÀº ´Ù¸¥ ÇÁ·Î¼¼½º ¿¡¼­µµ º¼ ¼ö ÀÖ´Ù. ´õ¿ì±â ÀÚ½Ä ¶Ç´Â ºÎ¸ð ÇÁ·Î¼¼½º¿¡ ÀÇÇØ mmap(2) ȤÀº munmap(2)À¸·Î¼öÇàµÇ´Â¸Þ¸ð¸®¸ÅÇζǴ¾ð¸ÅÇοª½Ã´Ù¸¥ÇÁ·Î¼¼½º¿¡¿µÇâÀ»¹ÌÄ£´Ù. ¸¸ÀÏ CLONE_VM ÀÌ ¼³Á¤µÇÁö ¾ÊÀ¸¸é, ÀÚ½Ä ÇÁ·Î¼¼½º´Â .BR __cloneÀÇ ½Ã°£¿¡¼­, ºÎ¸ðÀÇ ¸Þ¸ð¸® °ø°£ÀÇ ºÐ¸®µÈ º¹Á¦³»¿¡¼­ ½ÇÇàµÈ´Ù. fork(2) ÀÇ °æ¿ì¿¡¼­ º¼ ¼ö ÀÖµíÀÌ, ÇÁ·Î¼¼½ºµé Áß Çϳª¿¡ ÀÇÇØ ¼öÇàµÇ´Â ¸Þ¸ð¸® ÀÛ¼º ȤÀº ÆÄÀÏ ¸ÅÇÎ/¾ð¸ÅÇÎÀº ´Ù¸¥ °Í¿¡ ´ëÇØ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â´Ù.
CLONE_FS
¸¸ÀÏ CLONE_FS °¡ ¼³Á¤µÇ¸é, ºÎ¸ð¿Í ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀº µ¿ÀÏÇÑ ÆÄÀÏ ½Ã½ºÅÛ Á¤º¸¸¦ °øÀ¯ÇÑ´Ù. ÀÌ´Â ÆÄÀÏ ½Ã½ºÅÛÀÇ ·çÆ®, ÇöÀç ÀÛ¾÷ µð·ºÅ丮, ±×¸®°í umask¸¦ Æ÷ÇÔÇÑ´Ù. ºÎ¸ð ȤÀº ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¼öÇàµÇ´Â chroot(2), chdir(2), ¶Ç´Â umask(2) ¿¡ ´ëÇÑ È£Ãâ ¿ª½Ã ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù. ¸¸ÀÏ CLONE_FS ÀÌ ¼³Á¤µÇÁö ¾ÊÀ¸¸é ÀÚ½Ä ÇÁ·Î¼¼½º´Â __clone ÀÇ ½Ã°£¿¡¼­, ºÎ¸ðÀÇ ¸Þ¸ð¸® °ø°£ÀÇ ºÐ¸®µÈ º¹Á¦³»¿¡¼­ ½ÇÇàµÈ´Ù. ÇÑ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ³ªÁß¿¡ ¼öÇàµÉ chroot(2), chdir(2), umask(2) ¿¡ ´ëÇÑ È£ÃâÀº ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â´Ù.
CLONE_FILES
¸¸ÀÏ CLONE_FILES ÀÌ ¼³Á¤µÇ¸é, ºÎ¸ð¿Í ÀÚ½Ä ÇÁ·Î¼¼½º´Â µ¿ÀÏÇÑ ÆÄÀÏ ±â¼úÀÚ Å×À̺íÀ» °øÀ¯ÇÑ´Ù. ÆÄÀÏ ±â¼úÀÚµéÀº Ç×»ó ºÎ¸ð ±×¸®°í ÀÚ½Ä ÇÁ·Î¼¼½º ³»ÀÇ µ¿ÀÏÇÑ ÆÄÀϵéÀ» ÂüÁ¶ÇÑ´Ù. ºÎ¸ð ȤÀº ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¸¸µé¾îÁø ¸ðµç ÆÄÀÏ ±â¼úÀÚ´Â ´Ù¸¥ ÇÁ·Î¼¼½º¿¡¼­µµ ¿ª½Ã Ÿ´çÇÏ´Ù. ÀÌ¿Í À¯»çÇÏ°Ô, ¸¸ÀÏ ÇÁ·Î¼¼½ºµéÁß Çϳª°¡ ÆÄÀÏ ±â¼úÀÚ¸¦ ´Ý°Å³ª, °ü·ÃµÈ Ç÷¡±×µéÀ» º¯°æ½ÃÅ°¸é, ±âŸ ÇÁ·Î¼¼½º°¡ ¿ª½Ã ¿µÇâÀ» ¹Þ´Â´Ù.. CLONE_FILES ÀÌ ¼³Á¤µÇÁö ¾ÊÀ¸¸é, ÀÚ½Ä ÇÁ·Î¼¼½º´Â __cloneÀǽ𣿡ºÎ¸ðÇÁ·Î¼¼½º¿¡¼­¿­¸°ÆÄÀϱâ¼úÀÚµéÀǺ¹»çº»À»»ó¼Ó¹Þ´Â´Ù. ºÎ¸ð ȤÀº ÀÚ½Ä ÇÁ·Î¼¼½ºµé Áß Çϳª¿¡ ÀÇÇØ ³ªÁß¿¡ ¼öÇàµÉ ÆÄÀÏ ±â¼úÀڵ鿡 ´ëÇÑ ¿¬»êÀº ´Ù¸¥ °Í¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù.
CLONE_SIGHAND
CLONE_SIGHAND ÀÌ ¼³Á¤µÇ¸é, ºÎ¸ð ¹× ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀº ½Ã±×³Î 󸮱âÀÇ µ¿ÀÏÇÑ Å×À̺íÀ» °øÀ¯ÇÑ´Ù. ¸¸ÀÏ º¸¸ð ȤÀº ÀÚ½Ä ÇÁ·Î¼¼½º°¡ sigaction(2) ¸¦ È£ÃâÇÏ¿© ½Ã±×³Î°ú °ü·ÃµÈ ÇàÀ§¸¦ º¯°æ½ÃÅ°°íÀÚ ÇÑ´Ù¸é, ´Ù¸¥ ÇÁ·Î¼¼½º³»ÀÇ ±× ÇàÀ§ ¿ª½Ã º¯°æµÈ´Ù. ±×·¯³ª, ºÎ¸ð¿Í ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀº ¿©ÀüÈ÷ µ¶Æ¯ÇÑ ½Ã±×³Î ¸¶½ºÅ©°ú ÀÏ·ÃÀÇ Ææµù ½Ã±×³ÎµéÀ» °®´Â´Ù. µû¶ó¼­ ±×µéÁß Çϳª´Â ´Ù¸¥ ½Ã±×³Î¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê°í, sigprocmask(2) À» »ç¿ëÇÏ¿© ÀϺΠ½Ã±×³ÎÀ» ºí·ÎÅ·Çϰųª, ÇÏÁö ¾Ê´Â´Ù. CLONE_SIGHAND ÀÌ ¼³Á¤µÇÁö ¾ÊÀ¸¸é, ÀÚ½Ä ÇÁ·Î¼¼½º´Â __clone ÀÇ ½Ã°£¿¡ ºÎ¸ð ÇÁ·Î¼¼½º¿¡¼­ ¿­¸° ½Ã±×³Î 󸮱âµéÀÇ º¹»çº»À» »ó¼Ó¹Þ´Â´Ù. ºÎ¸ð ȤÀº ÀÚ½Ä ÇÁ·Î¼¼½ºµé Áß Çϳª¿¡ ÀÇÇØ ³ªÁß¿¡ ¼öÇàµÉ ÆÄÀÏ ±â¼úÀڵ鿡 ´ëÇÑ ¿¬»êÀº ´Ù¸¥ ÇÁ·Î¼¼½º ¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. ÇϳªÀÇ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¼öÇàµÇ´Â sigaction(2) ¿¡ ´ëÇÑ È£ÃâÀº ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù.
CLONE_PID
¸¸ÀÏ CLONE_PID ÀÌ ¼³Á¤µÇ¸é, ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ð ÇÁ·Î¼¼½º¿Í °°Àº µ¿ÀÏÇÑ ÇÁ·Î¼¼½º ID¸¦ °®°í ¸¸µé¾îÁø´Ù. ¸¸ÀÏ CLONE_PID ÀÌ ¼³Á¤µÇÁö ¾ÊÀ¸¸é, ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ð ÇÁ·Î¼¼½º¿Í ´Ù¸¥ µ¶Æ¯ÇÑ ÇÁ·Î¼¼½º ID¸¦ ¼ÒÀ¯ÇÑ´Ù.
 

¹Ýȯ°ª

¼º°øÇϸé, ÀÚ½Ä ÇÁ·Î¼¼½ºÀÇ PID´Â ºÎ¸ðÀÇ ½ÇÇàÇÒ ¾²·¹µå ³»¿¡ ¸®ÅϵȴÙ. ½ÇÆÐÇϸé, -1ÀÌ ºÎ¸ðÀÇ ¹®¸Æ¿¡ ¸®Åϵǰí, ¾î¶² ÀÚ½Ä ÇÁ·Î¼¼½ºµµ »ý¼ºµÇÁö ¾ÊÀ¸¸ç, errno °¡ ÀûÀýÇÏ°Ô ¼³Á¤µÉ °ÍÀÌ´Ù.  

¿¡·¯

EAGAIN
ÀÌ¹Ì ³Ê¹«³ª ¸¹Àº ÇÁ·Î¼¼½ºµéÀÌ ½ÇÇàÁß¿¡ ÀÖ´Ù.
ENOMEM
__clone Àº ÀڽĿ¡ ´ëÇÑ ÀÛ¾÷ ±¸Á¶¸¦ ÇÒ´çÇϰųª, º¹»çµÉ ÇÊ¿ä°¡ ÀÖ´Â ºÎ¸ðÀÇ ÄÁÅؽºÆ®¿¡ ´ëÇÑ ºÎºÐµéÀ» º¹»çÇϴµ¥ ÃæºÐÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¼ö ¾ø´Ù.
 

¹ö±×

Ä¿³ÎÀÇ 2.1.97¹öÀüÀ¸·Î¼­, CLONE_PID Ç÷¡±×´Â »ç¿ëµÇ¾î¼­´Â ¾ÈµÈ´Ù. ¿Ö³ÄÇϸé, Ä¿³ÎÀÇ ´Ù¸¥ ºÎºÐµé°ú ´ëºÎºÐÀÇ ½Ã½ºÅÛ ¼ÒÇÁÆ®¿þ¾î°¡ ¾ÆÁ÷ ÇÁ·Î¼¼½º ID´Â µ¶Æ¯ÇÑ °ÍÀ¸·Î¼­ °¡Á¤ÇÏ°í Àֱ⠶§¹®ÀÌ´Ù. libc ¹öÀü 5. libc 6 (a.k.a. glibc 2)°¡ Á¦°øÇÏ´Â __clone ¿¡ ´ëÇÑ Ç׸ñÀÌ ¾ø´Ù. __clone ÀÌ ¼³¸í¼­¿¡¼­ ¼³¸íÇÑ ¹Ù¿Í °°´Ù.  

ȣȯ

The __clone È£ÃâÀº ¸®´ª½º¿ëÀÌ°í, Æ÷ÆÃÇÒ Àǵµ¸¦ Áö´Ñ ÇÁ·Î±×·¥¿¡¼­´Â »ç¿ëµÇ¼­´Â ¾ÈµÈ´Ù. ÇÁ·Î±×·¡¹Ö ¾²·¹µå °¡´ÉÇÑ ¾îÇø®ÄÉÀ̼ǿ¡ ´ëÇؼ­, ¸®´ª½º ¾²·¹µå ¶óÀ̺귯¸®¿Í °°Àº POSIX 1003.1c thread API¸¦ ±¸ÇöÇÏ´Â ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. pthread_create(3thr) ¸¦ ÂüÁ¶Ç϶ó. ÀÌ ¼³¸í¼­ ÆäÀÌÁö´Â Ä¿³Î 2.0.x ±×¸®°í 2.1.x, ±×¸®°í glibc 2.0.x¿¡ »óÀÀÇÑ´Ù.  

°ü·Ã Ç׸ñ

fork(2), pthread_create(3thr)  

¿ªÀÚ

ASPLINUX<man@asp-linux.co.kr>, 2000³â 7¿ù 29ÀÏ


 

Index

À̸§
»ç¿ë¹ý
¼³¸í
¹Ýȯ°ª
¿¡·¯
¹ö±×
ȣȯ
°ü·Ã Ç׸ñ
¿ªÀÚ

This document was created by man2html, using the manual pages.
Time: 08:06:58 GMT, March 25, 2004