.\" .\" This manual page is taken directly from Plan9, and modified to .\" describe the actual BSD implementation. Permission for .\" use of this page comes from Rob Pike . .\" .\" %FreeBSD: src/lib/libc/sys/rfork. 2, v 1.11. 2.11 2002/07/30 19:04:25 silby Exp % .\" .\" $FreeBSD: doc/ja_JP.eucJP/man/man2/rfork. 2, v 1.10 2002/08/11 19:49:11 horikawa Exp $ .Dd January 12, 1996 .Dt RFORK 2 .Os .Sh ¸íĪ .Nm rfork .Nd ÇÁ·Î¼¼½º ¸®¼Ò½ºÀÇ Á¶ÀÛ .Sh ÇÁ·Î±×·¥ ¶óÀ̺귯¸® .Lb libc .Sh ¼­½Ä .In unistd.h .Ft int .Fn rfork "int flags" .Sh ÇØ¼³ fork, vfork, rfork ´Â, »õ·Î¿î ÇÁ·Î¼¼½º°¡ ÀÛ¼ºµÇ´Â À¯ÀÏÇÑ ¹æ¹ýÀÔ´Ï´Ù. .Fn rfork ¿¡ÀÇ Àμö .Fa flags (Àº)´Â, ±âµ¿Çϰí ÀÖ´Â ÇÁ·Î¼¼½º (Ä£) ¸ñÀÇ ¸®¼Ò½º°¡ »õ·Î¿î ÇÁ·Î¼¼½º (¾ÆÀÌ)¿¡ µû¶ó¼­ °øÀ¯µÇ´ÂÁö, ¶Ç´Â ±×·¯ÇÑ ±âº»°ª¿¡ ÃʱâÈ­µÇ´ÂÁö¸¦ ¼±ÅÃÇÕ´Ï´Ù. ¸®¼Ò½º¿¡´Â ¿ÀÇ ÆÄÀÏ ±â¼úÀÚ Å×À̺í (À̰ÍÀº, °øÀ¯µÇ´Â °æ¿ì, ÇÁ·Î¼¼½º°¡ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ´ëÇØ ÆÄÀÏÀ» °³ÆóÇÏ´Â °ÍÀ» Çã¿ë ÇÕ´Ï´Ù) ¹× ¿ÀÇ ÆÄÀÏÀÌ Æ÷ÇԵ˴ϴÙ. .Fa flags (Àº)´Â ´ÙÀ½ÀÇ Ç׸ñÀÇ À±¸®È­ (OR)ÀÔ´Ï´Ù. .Bl -tag -width "RFCNAMEG" -compact -offset indent .It RFPROC ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì, »õ·Î¿î ÇÁ·Î¼¼½º°¡ ÀÛ¼ºµË´Ï´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì, º¯°æÀÌ ÇöÀçÀÇ ÇÁ·Î¼¼½º¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù. ÇöÀçÀÇ ½ÇÀåÀº, ÀÌ Ç÷¡±×°¡ ¹Ýµå½Ã ¼³Á¤µÇ¾î ÀÖ´Â °ÍÀ» ¿ä±¸ÇÕ´Ï´Ù. .It RFNOWAIT ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì, child process´Â parent process·ÎºÎÅÍ ºÐ¸®µË´Ï´Ù. Á¾·á½Ã¿¡, child process´Â, parent process°¡ ¸ðÀ¸´Â ½ºÅ×ÀÌÅͽº¸¦ ³²±âÁö ¾Ê½À´Ï´Ù. .Xr wait 2 (À»)¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä. .It RFFDG ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì, ±âµ¿ÃøÀÇ ÆÄÀÏ ±â¼úÀÚ Å×À̺í .Xr ( intro 2 (À»)¸¦ ÂüÁ¶)°¡ Ä«Çǵ˴ϴÙ. ±×·¸Áö ¾ÊÀº °æ¿ì, 2 °³ÀÇ ÇÁ·Î¼¼½º°¡ 1 °³ÀÇ Å×À̺íÀ» °øÀ¯ÇÕ´Ï´Ù. .It RFCFDG ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì, »õ·Î¿î ÇÁ·Î¼¼½º´Â »õ·Î¿î ÆÄÀÏ ±â¼úÀÚ Å×À̺í·Î °³½ÃÇÕ´Ï´Ù. .Dv RFFDG (¿Í)°ú´Â ¼­·Î ¹èŸÀûÀÔ´Ï´Ù. .It RFMEM ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì, Åë»ó, Çϵå¿þ¾îÀÇ ÆäÀÌÁö Å×À̺íÀ» Á÷Á¢ °øÀ¯ÇÏ´Â °ÍÀ¸·Î, Ä¿³ÎÀº address °ø°£ ÀüüÀÇ °øÀ¯¸¦ °­Á¦ÇÕ´Ï´Ù. ¾ÆÀÌ´Â, ÀÌ·¯ÇÑ ¹æ¹ýÀ¸·Î, parent process°¡ ¼ÒÀ¯Çϰí ÀÖ´Â ¸ðµç ¼¼±×¸ÕÆ®(segment)¸¦, ±×°ÍÀÌ Æò»ó½Ã °øÀ¯ °¡´ÉÇѰ¡ ¾Æ´Ñ°¡¿¡ °ü°è¾øÀÌ, °è½ÂÇØ °øÀ¯ÇÕ´Ï´Ù. ½ºÅà ¼¼±×¸ÕÆ®´Â ºÐÇÒµÇÁö ¾Ê´Â´Ù (ºÎ¸ð¿Í ¾ÆÀÌÀÇ ¾çÂÊ ¸ðµÎ°¡ °°Àº ½ºÅÃ»ó¿¡ º¹±ÍÇÑ´Ù) ÀÇ·Î, RFMEM Ç÷¡±×¸¦ ÁöÁ¤Çß´Ù .Fn rfork (Àº)´Â ÀϹÝÀûÀ¸·Î, C ¾ð¾î¸¦ Æ÷ÇÔÇÑ °í±Þ¾ð¾î·ÎºÎÅÍ Á÷Á¢ È£ÃâÇÒ ¼ö ¾ø½À´Ï´Ù. ¸ðµÎ ¼³Á¤ °¡´ÉÇÑ Ç÷¡±×´Â .Dv RFPROC »ÓÀÔ´Ï´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇØ, Á¦°øµÈ ½ºÅû󿡼­ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ ´Þ¸®°Ô Çϱâ À§Çؼ­(¶§¹®¿¡) º¸Á¶ ÇÔ¼ö°¡ Á¦°øµÇ°í ÀÖ½À´Ï´Ù. ÀÚ¼¼ÇϰԴ .Fn rfork_thread 3 (À»)¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä. .It RFSIGSHARE ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì, Ä¿³ÎÀº, ºÎ¸ð¿Í ÀÚ½Ä »çÀÌ¿¡ sigacts ±¸Á¶Ã¼¸¦ °øÀ¯ÇÏ´Â °ÍÀ» °­Á¦ÇÕ´Ï´Ù. .It RFLINUXTHPN ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì, Ä¿³ÎÀº, ¾ÆÀÌ¿¡ ´ëÇÑ thread Á¾·á½Ã¿¡, SIGCHILD ´ë½Å¿¡ SIGUSR1 ¸¦ µ¹·ÁÁÝ´Ï´Ù. À̰ÍÀº ƯÁ¤ÀÇ Linux Ŭ·Ð µ¿ÀÛÀ» ¸ð¹æÇϱâ (À§ÇØ)¶§¹®ÀÔ´Ï´Ù. .El .Pp °øÀ¯ ÆÄÀÏ ±â¼úÀÚ Å×ÀÌºí³»ÀÇ ÆÄÀÏ ±â¼úÀÚ´Â, ¸í½ÃÀûÀ¸·Î ´ÝÇôÁö´ÂÁö, ¶Ç´Â Å×À̺íÀ» °øÀ¯Çϰí ÀÖ´Â ¸ðµç ÇÁ·Î¼¼½º°¡ Á¾·áÇÒ ¶§±îÁö ¿¬ ä·Î·Î À¯ÁöµË´Ï´Ù. .Pp .Dv RFPROC ÇÏÁö¸¸ ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì, parent process³»¿¡¼­ µ¹·ÁÁÖ¾îÁö´Â °ªÀº child processÀÇ ÇÁ·Î¼¼½º ID ÀÔ´Ï´Ù. child process³»¿¡¼­ µ¹·ÁÁÖ¾îÁö´Â °ªÀº 0 ÀÔ´Ï´Ù. .Dv RFPROC ÇÏÁö¸¸ ¾ø´Â °æ¿ì, ¹Ýȯ°ªÀº 0 ÀÔ´Ï´Ù. ÇÁ·Î¼¼½º ID ÀÇ ¹üÀ§´Â 1 À¸·ÎºÎÅÍ ÃÖ´ë Á¤¼öÄ¡ .Ft ( int ) ÀÔ´Ï´Ù. ÇÊ¿äÇϸé, ¿ä±¸µÈ ÇÁ·Î¼¼½º ¸®¼Ò½º°¡ ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô µÉ ¶§±îÁö .Fn rfork (Àº)´Â ´ë±âÇÕ´Ï´Ù. .Pp .Fn fork (Àº)´Â, .Fn rfork "RFFDG | RFPROC" ¿¡ÀÇ È£Ãâ·Î¼­ ½ÇÀå °¡´ÉÇÕ´Ï´Ù¸¸, ÈĹæ ȣȯ¼ºÀ» À§Çؼ­(¶§¹®¿¡) ±×ó·³Àº ½ÇÀåµÇ°í ÀÖÁö ¾Ê½À´Ï´Ù. .Sh ¹Ýȯ°ª Á¤»óÀûÀ¸·Î ¿Ï·áÇßÀ» °æ¿ì, .Fn rfork (Àº)´Â, child process¿¡ °ª 0 À» µ¹·ÁÁÖ¾î, child processÀÇ ÇÁ·Î¼¼½º ID ¸¦ parent process¿¡ µ¹·ÁÁÝ´Ï´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì, child process´Â ÀÛ¼ºµÇÁö ¾Ê°í , °ª -1 ÀÌ parent process¿¡ µ¹·ÁÁÖ¾î ¿¡·¯¸¦ ³ªÅ¸³»±â À§Çؼ­(¶§¹®¿¡) ±Û·Î¹ú º¯¼ö .Va errno ÇÏÁö¸¸ ¼³Á¤µË´Ï´Ù. .Sh ¿¡·¯ .Fn rfork (Àº)´Â, ´ÙÀ½ÀÇ °æ¿ì¿¡ 󸮸¦ ½ÇÆÐÇØ, child process´Â ÀÛ¼ºµÇÁö ¾Ê½À´Ï´Ù. .Bl -tag -width Er .It Bq Er EAGAIN ½ÇÇàÁßÀÇ ÇÁ·Î¼¼½ºÀÇ ÇÕ°è¼ö°¡ ½Ã½ºÅÛÀÇ ºÎ°úÇÏ´Â Á¦ÇÑÀ» ÃʰúÇØ ¹ö¸³´Ï´Ù. Á¦ÇÑÀº .Xr sysctl 3 MIB º¯¼ö .Dv KERN_MAXPROC ¿¡ ÀÇÇØ ÁöÁ¤µË´Ï´Ù (½´ÆÛ À¯Àú¸¦ Á¦¿ÜÇØ, Á¦ÇÑÀº ½ÇÁ¦·Î´Â À̰ͺ¸´Ù 10 °³ Àû°Ô µË´Ï´Ù). .It Bq Er EAGAIN À¯Àú°¡ ½´ÆÛ À¯Àú°¡ ¾Æ´Ï°í, 1 ¸íÀÇ À¯Àú¿¡ ÀÇÇÑ ½ÇÇàÁßÀÇ ÇÁ·Î¼¼½ºÀÇ ÇÕ°è¼ö°¡ ½Ã½ºÅÛÀÇ ºÎ°úÇÑ Á¦ÇÑÀ» ÃʰúÇØ ¹ö¸³´Ï´Ù. Á¦ÇÑÀº, .Xr sysctl 3 MIB º¯¼ö .Dv KERN_MAXPROCPERUID ¿¡ ÀÇÇØ ÁöÁ¤µË´Ï´Ù. .It Bq Er EAGAIN À¯Àú°¡ ½´ÆÛ À¯Àú°¡ ¾Æ´Ï°í, ¸®¼Ò½º ÆÄ¶ó¹ÌÅÍ .Dv RLIMIT_NOFILE ¿¡ ´ëÀÀÇÏ´Â ¼ÒÇÁÆ® ¸®¼Ò½ºÀÇ Á¦ÇÑÀ» ÃʰúÇØ ¹ö¸³´Ï´Ù .Pf ( Xr getrlimit 2 (À»)¸¦ ÂüÁ¶). .It Bq Er EINVAL RFPROC Ç÷¡±×°¡ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù. .It Bq Er EINVAL RFFDG Ç÷¡±×¿Í RFCFDG Ç÷¡±×ÀÇ ¾çÂÊ ¸ðµÎ°¡ ÁöÁ¤µÇ¾ú½À´Ï´Ù. .It Bq Er ENOMEM »õ·Î¿î ÇÁ·Î¼¼½º¿ëÀ¸·Î ÃæºÐÇÑ ½º¿Ò °ø°£ÀÌ ºÎÁ·Çß½À´Ï´Ù. .El .Sh °ü·Ã Ç׸ñ .Xr fork 2 , .Xr intro 2 , .Xr minherit 2 , .Xr vfork 2 , .Xr rfork_thread 3 .Sh ¹ö±× .Fx (Àº)´Â native ÀÎ .Fn clone ÇÁ·Î±×·¥ ¶óÀ̺귯¸® ÄÝÀ» ¾ÆÁ÷µµ ½ÇÀåµÇ°í ÀÖÁö¾Ê°í, ÇöÀçÀÇ pthreads ½ÇÀåÀº RFMEM ¸¦ ÁöÁ¤Çß´Ù .Fn rfork (À»)¸¦ ÀÌ¿ëÇϰí ÀÖÁö ¾Ê½À´Ï´Ù. linux thread ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ native port ÀÎ, .Pa /usr/ports/devel/linuxthreads (Àº)´Â RFMEM ¸¦ ÀÌ¿ëÇØ µ¿ÀÛÇÑ´Ù .Fn clone È£ÃâÀ» Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. .Fn rfork_thread ÇÁ·Î±×·¥ ¶óÀ̺귯¸® ÇÔ¼ö´Â .Fn clone ÀÇ ´ë½ÅÀ¸·Î¼­ ÀÌ¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. .Sh ¿ª»ç .Fn rfork ÇÔ¼ö´Â Plan9 ±×¸®°í óÀ½ µîÀåÇß½À´Ï´Ù.