fork

ëªì¹
     fork — ìë¡ì´ íë¡ì¸ì¤ë¥¼ ìì±íë¤

íë¡ê·¸ë¨ ë¼ì´ë¸ë¬ë¦¬
     Standard C Library (libc, -lc)

ìì
     <sys/types.h> <unistd.h> pid_t fork(void)

í´ì¤
     fork() ì ìí´ ìë¡ì´ íë¡ì¸ì¤ì ìì±ì í©ëë¤. ìë¡ì´ íë¡ì¸ì¤ (child process)ë,
     ì´íì í목ì ì ì¸í í¸ì¶ íë¡ì¸ì¤ (parent process)ì ì íí ì¹´í¼ìëë¤.

           ·   child processë ëí¹í íë¡ì¸ì¤ ID 를 ê°ì§ëë¤.

           ·   child processë ë¤ë¥¸ parent process ID 를 ê°ì§ëë¤ (ì¦, parent
               processì íë¡ì¸ì¤ ID ìëë¤).

           ·   child processë, ì ì©ì, ë¶ëª¨ì 기ì ìì ì¹´í¼ë¥¼ ê°ì§ëë¤.  ê·¸ë¬í
               기ì ìë í층ì ê°ì ì¤ë¸ì í¸ë¥¼ 참조í©ëë¤.  ì¦ ìì´ì ë¶ëª¨ì
               ì¬ì´ë¡, ì를 ë¤ì´ íì¼ ì¤ë¸ì í¸ë´ì íì¼ í¬ì¸í°ê° ê³µì ë©ëë¤. ê·¸
               ë문ì child processì 기ì ììê²ë¡ì lseek(2) íì§ë§, ê·¸ íì ë¶ëª¨ì
               ìíë¤ read(2) ëë write(2) ì ìí¥ì 미칩ëë¤. ì´ ê¸°ì ì ì¹´í¼ë,
               ìë¡ê² ìì±ë íë¡ì¸ì¤ì©ì íì¤ ìì¶ë ¥ì í립í기 ìí´ì, ë° íì´í를 ìì
               í기 ìí´ì, ìì ìí´ë ì¬ì©ë©ëë¤.

           ·   child processì 리ìì¤ ì¬ì© ìí©ì 0 ì¼ë¡ ì¤ì ë©ëë¤.  setrlimit(2)
               (ì)를 ì°¸ì¡°í´ ì£¼ì¸ì.

           ·   ëª¨ë  ì¸í°ë² íì´ë¨¸ê° í´ë¦¬ì´ ë©ëë¤.  setitimer(2) (ì)를
               ì°¸ì¡°í´ ì£¼ì¸ì.

ë°íê°
     ì ìì ì¼ë¡ ìë£íì ê²½ì°, fork() (ì)ë, child processì ê° 0 ì ëë ¤ì£¼ì´,
     child processì íë¡ì¸ì¤ ID 를 parent processì ëë ¤ì¤ëë¤.  ê·¸ë ì§ ìì
     ê²½ì°ë -1 ì´ parent processì ëë ¤ì£¼ì´ì ¸ child processë ìì±ëì§ ìê³  ,
     ìë¬ë¥¼ ëíë´ê¸° ìí´ì(ë문ì) ê¸ë¡ë² ë³ì errno íì§ë§ ì¤ì ë©ëë¤.

ìë¬
     ë¤ìì ê²½ì°ì fork() (ì)ë ì²ë¦¬ì ì¤í¨í´, child processë ìì±ëì§ ììµëë¤.

     [EAGAIN]           ì¤íì¤ì íë¡ì¸ì¤ì í©ê³ìê° ìì¤íì íê³ë¥¼ ëìµëë¤. íê³ì¹ë
                        sysctl(3) ì MIB ë³ìì KERN_MAXPROC ì ìí´ ì§ì ë©ëë¤ (ìí¼
                        ì ì 를 ì ì¸í´, ì¤ì ë¡ë íê³ë ì´ê²ë³´ë¤ 10 ê° ì ê²
                        ë©ëë¤).

     [EAGAIN]           ì ì ê° ìí¼ ì ì ê° ìëê³ , 1 ëªì ì ì ì ìí´ ì¤íì¤ì
                        íë¡ì¸ì¤ì í©ê³ìì ìì¤íì´ ë¶ê³¼íë¤ íê³ë¥¼ ëìµëë¤. íê³ë
                        sysctl(3) ì MIB ë³ìì KERN_MAXPROCPERUID ì ìí´
                        ì§ì ë©ëë¤.

     [EAGAIN]           ì ì ê° ìí¼ ì ì ê° ìëê³ , 리ìì¤ íë¼ë¯¸í°ì RLIMIT_NPROC
                        ì ëìíë ìíí¸ ë¦¬ìì¤ íê³ë¥¼ ëìµëë¤.  (getrlimit(2)
                        (ì)를 참조).

     [ENOMEM]           ìë¡ì´ íë¡ì¸ì¤ì©ì ì¤ì ê³µê°ì´ ë¶ì¶©ë¶í©ëë¤.

ê´ë ¨ í목
     execve(2), rfork(2), setitimer(2), setrlimit(2), vfork(2), wait(2)

ìì¬
     fork() í¨ìë Version 6 AT&T UNIX ê·¸ë¦¬ê³  ë±ì¥íìµëë¤.