clone

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



ì´ë¦
       __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ì¼



Linux 2.0.33                     25 april 1998                        CLONE(2)