VFORK

Section: ¸®´ª½º ÇÁ·Î±×·¡¸Ó ¸Å´º¾ó (2)
Updated: 1999³â 11¿ù 1ÀÏ
Index
Return to Main Contents
 

À̸§

vfork - ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸¸µé°í ºÎ¸ð ÇÁ·Î¼¼½º¸¦ ºÀ¼âÇÑ´Ù.  

»ç¿ë¹ý

#include <unistd.h>

pid_t vfork(void);  

Ç¥ÁØ ¼³¸í

(XPG4 / SUSv2 / POSIX Ãʾȿ¡¼­.) vfork()ÇÔ¼ö´Â vfork()¿¡ ÀÇÇØ »ý¼ºµÈ ÇÁ·Î¼¼½º°¡ vfork()ÀÇ ¹Ýȯ °ªÀ» ÀúÀåÇϱâ À§ÇØ »ç¿ëµÈ pid_t ŸÀÔÀÇ º¯¼ö¿Ü ´Ù¸¥ µ¥ÀÌÅ͸¦ ¼öÁ¤Çϰųª, vfork()¸¦ È£ÃâÇϱâ Àü¿¡ ÇÔ¼ö¿¡¼­ ¸®Åϵǰųª, _exit()¸¦ ¼º°øÀûÀ¸·Î È£ÃâÇϱâ Àü¿¡ ´Ù¸¥ ÇÔ¼ö¸¦ È£ÃâÇϰųª, exec ÇÔ¼ö °è¿­Áß Çϳª¸¦ È£ÃâÇÒ°æ¿ì ÇൿÀ» Á¤ÀÇÇÒ¼ö ¾ø´Ù´Â °ÍÀ» Á¦¿ÜÇÏ°í´Â fork()¿Í °°Àº È¿°ú¸¦ °¡Áø´Ù.

 

¿¡·¯

EAGAIN
ÇÁ·Î¼¼½ºµéÀÌ ³Ê¹« ¸¹´Ù. - ´Ù½Ã ½Ãµµ.
ENOMEM
»õ ÇÁ·Î¼¼½º¸¦ À§ÇÑ ½º¿Ò °ø°£ÀÌ ÃæºÐÇÏÁö ¾Ê´Ù.
 

¸®´ª½º ¼³¸í

fork(2)ó·³, vfork´Â È£Ãâ ÇÁ·Î¼¼½ºÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸¸µç´Ù. ¼¼ºÎ »çÇ×°ú ¹Ýȯ °ª ±×¸®°í ¿¡·¯´Â fork(2)¸¦ ÂüÁ¶Çضó.

vfork() ´Â clone(2)ÀÇ Æ¯º°ÇÑ °æ¿ìÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ºÎ¸ð ÇÁ·Î¼¼½ºÀÇ ÆäÀÌÁö Å×À̺íÀ» º¹»çÇÏÁö ¾Ê°í »õ ÇÁ·Î¼¼½º¸¦ ¸¸µç´Ù. ÀÌ ÇÔ¼ö´Â ÀÚ½ÄÀÌ execve()ÈÄ¿¡ Áï½Ã ¸¸µé¾îÁ®¾ß ÇÏ´Â ¼º´É¿¡ ¹Î°¨ÇÑ ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­´Â À¯¿ëÇÏ´Ù.

vfork() ´Â ÀÚ½ÄÀÌ execve(2)³ª _exit(2)¸¦ È£ÃâÇÒ¶§±îÁö ºÎ¸ð°¡ ÀϽà ÁßÁöµÇ±â ¶§¹®¿¡ fork¿Í´Â ´Ù¸£´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º´Â execve() °¡ ÀڽĿ¡ ÀÇÇØ ½ÇÇàµÉ¶§±îÁö ½ºÅÃÀ» Æ÷ÇÔÇÏ¿© ºÎ¸ð¿Í ¸ðµç ¸Þ¸ð¸®¸¦ °øÀ¯ÇÑ´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º´Â ÇöÀç ÇÔ¼ö³ª exit()È£Ãâ¿¡¼­ ¹ÝȯÇؼ­´Â ¾ÊµÇÁö¸¸ _exit()È£Ãâ¿¡¼­´Â µÈ´Ù.

½Ã±×³Î Çڵ鷯´Â »ó¼ÓµÇÁö¸¸ °øÀ¯µÇÁö´Â ¾Ê´Â´Ù. ºÎ¸ð ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ½ÅÈ£´Â ÀÚ½ÄÀÌ ºÎ¸ð¸¦ ³õ¾ÆÁØ ÈÄ¿¡ µµÂøÇÑ´Ù.  

¿ª»çÀû ¼³¸í

¸®´ª½º¿¡¼­, fork()´Â copy-on-write ÆäÀÌÁö¸¦ »ç¿ëÇÏ¿© ¼öÇàµÈ´Ù. ±×·¡¼­ ´ÜÁö fork()¿¡ ÀÇÇØ »ý±ä ºÒÀÌÀÍÀº ºÎ¸ð ÆäÀÌÁö Å×ÀÌºí º¹»ç ¹× ÀÚ½ÄÀ» À§ÇÑ ´ÜÀÏ Å½ºÅ© ±¸Á¶Ã¼¸¦ ¸¸µé±â À§ÇØ ¿ä±¸µÇ´Â ½Ã°£°ú ¸Þ¸ð¸®ÀÌ´Ù. ±×·¯³ª, ¿À·¡Àü¿¡ fork()´Â exec()¸¦ ½ÇÇàÇÑ ÈÄ Áï½Ã ºÒ ÇÊ¿äÇÏ°Ô, È£Ãâ ÇÁ·Î¼¼½ºÀÇ µ¥ÀÌÅÍ °ø°£ÀÇ ¿ÏÀüÇÑ º¹»ç¸¦ Çϵµ·Ï ¿ä±¸ Çß´Ù. ±×ÈÄ È¿À²¼ºÀ» À§ÇØ, BSD ´Â ºÎ¸ð ÇÁ·Î¼¼½ºÀÇ ÁÖ¼Ò °ø°£À» ¿ÏÀüÈ÷ º¹»çÇÏÁö´Â ¾ÊÁö¸¸ execve()°¡ È£ÃâµÇ°Å³ª Á¾·á µÉ¶§±îÁö ºÎ¸ðÀÇ ¸Þ¸ð¸®¿Í ¾²·¹µå Á¦¾î¸¦ ºô¸®´Â vfork ½Ã½ºÅÛ ÄÝÀ» ¼Ò°³Çß´Ù. ºÎ¸ð ÇÁ·Î¼¼½º´Â ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ÇØ´ç ÀÚ¿øÀ» »ç¿ëÇÒ¶§±îÁö ÀϽà ÁßÁö µÈ´Ù. vforkÀÇ »ç¿ëÀº ½ÅÁßÇØ¾ß ÇÑ´Ù. -- ¿¹¸¦ µé¾î, º¯¼öµéÀÌ ·¹Áö½ºÅÍ¿¡ ÀâÇô ÀÖ´ÂÁö¸¦ ¾Ë°í ÀÖ´Â °æ¿ì¿¡ ºÎ¸ð ÇÁ·Î¼¼½º¿¡ ÀÖ´Â µ¥ÀÌÅ͸¦ ¼öÁ¤Çؼ­´Â ¾ÈµÈ´Ù.

 

¹ö±×

ÀÌ ÇÔ¼ö´Â ¸®´ª½º°¡ °ú°Å¿¡ ÀÌ·¯ÇÑ ºÒ¾ÈÀÇ ¿øÀÎÀ» µÇ»ì¾Æ³ª°Ô ÇÏ´Â °Íº¸´Ù ´õ ¿îÀÌ ¾ø´Ù. BSD ¸Ç ÆäÀÌÁö »óÅÂ: "ÀÌ ½º½ºÅÛ ÄÝÀº Àû´çÇÑ ½Ã½ºÅÛ ¸ÞÄ«´ÏÁòÀÌ ¼öÇàµÉ¶§ »ç¶óÁú °ÍÀÌ´Ù. »ç¿ëÀÚµéÀº vfork ÀÇ ¸Þ¸ð¸® °øÀ¯ Àǹ̷п¡ ÀÇÁ¸Çؼ­´Â ¾ÈµÈ´Ù. ¿Ö³ÄÇÏ¸é ±×·± °æ¿ì ÀÌ ÇÔ¼ö´Â forkÀÇ µ¿ÀǾîÀ̱⠶§¹®ÀÌ´Ù. "

Á¤»óÀûÀ¸·Î ¸»Çؼ­, À§¿¡ º¸¿©ÁØ Ç¥ÁØ ¼³¸íÀº ´ÙÀ½ exec°¡ ½ÇÆÐÇÏ°í ±×¸®°í ´ÙÀ½¿¡ ÀϾÀÏÀÌ Á¤ÀǵÇÁö ¾Ê±â ¶§¹®¿¡ vfork()ÀÇ »ç¿ëÀ» Çã¿ëÇÏÁö ¾Ê´Â´Ù. BSD ¸Ç ÆäÀÌÁö »óÅÂ: " °¡´ÉÇÑ µ¥µå ¶ô(deadlock) »óŸ¦ ÇÇÇϱâ À§ÇØ, vfork »óÅ¿¡ ÀÖ´Â ÀÚ½Ä ÇÁ·Î¼¼¼¼½ºµéÀº SIGTTOU ³ª SIGTTIN ½ÅÈ£¸¦ º¸³»¼­´Â ¾ÈµÈ´Ù; ±×º¸´Ù Ãâ·Â ¶Ç´Â ioctls ´Â Çã¿ëµÇ¸ç ÀÔ·Â ½Ãµµ´Â ÆÄÀÏ ³¡À» °¡¸®Å°°Ô µÈ´Ù.

ÇöÀç(Linux 2.3.25), strace(1)´Â vfork()À» µû¶ó°¥¼ö ¾øÀ¸¸ç Ä¿³Î ÆÐÄ¡¸¦ ÇØ¾ß ÇÑ´Ù.

 

¿ª»ç

vfork()½Ã½ºÅÛ ÄÝÀº 3.0 BSD¿¡¼­ ³ªÅ¸³µ´Ù. BSD 4.4¿¡¼­ ÀÌ ÇÔ¼ö´Â fork()¿Í µ¿ÀǾîÀÌÁö¸¸, NetBSD´Â ÀÌ ÇÔ¼ö¸¦ ´Ù½Ã ¼Ò°³Çß´Ù. cf. http://www.netbsd.org/Documentation/kernel/vfork.html . ¸®´ª½º¿¡¼­, ÀÌ ÇÔ¼ö´Â 2.2.0-pre6 ³ª ±×¶§±îÁö fork()¿Í °°´Ù. 2.2.0-pre9(i386¿¡¼­´Â ´Ù¸¥ ¾ÆÅ°ÅØÃĺ¸´Ù ´Ù¼Ò ´Ê´Ù) ÀÌÈÄ¿¡, ÀÌ ÇÔ¼ö´Â µ¶¸³ÀûÀÎ ½Ã½ºÅÛ ÄÝÀÌ´Ù. Áö¿øÀº glibc 2.0.112 ¿¡¼­ Ãß°¡µÇ¾ú´Ù.  

ȣȯ

vfork ÇÔ¼ö´Â ´Ù¸¥ OS¿¡¼­ °°Àº À̸§À» °¡Áö°í ÀÖ´Â ÇÔ¼öµé°ú ¾à°£ ºñ½ÁÇÏ´Ù. Ç¥ÁØ¿¡¼­ vfork ¸¦ ¼öÇàÇÒ¶§ÀÇ ¿ä±¸µéÀº fork¸¦ ¼öÇàÇÒ¶§ÀÇ °Íº¸´Ùµµ Àû´Ù. ±×·¡¼­ µÎ ÇÔ¼ö°¡ µ¿ÀǾîÀ϶§ÀÇ ¼öÇàÀº Àß µÈ´Ù. ƯÈ÷, ÇÁ·Î±×·¡¸Ó´Â execve() ³ª _exit() °¡ È£ÃâµÉ¶§±îÁö ºí·°µÈ ä·Î ³²¾Æ ÀÖ´Â ºÎ¸ð ÇÁ·Î¼¼½º¿¡ ÀÇÁ¸ÇÒ¼ö ¾øÀ¸¸ç ¾î¶² ƯÁ¤ Çൿ w.r.t °øÀ¯ ¸Þ¸ð¸®¿¡ ÀÇÁ¸ÇÒ¼öµµ ¾ø´Ù.  

°ü·Ã Ç׸ñ

clone(2), execve(2), fork(2), wait(2)  

¿ªÀÚ

Á¤°­ÈÆ <skyeyes@soback.kornet.net>, 2000³â 9¿ù 16ÀÏ


 

Index

À̸§
»ç¿ë¹ý
Ç¥ÁØ ¼³¸í
¿¡·¯
¸®´ª½º ¼³¸í
¿ª»çÀû ¼³¸í
¹ö±×
¿ª»ç
ȣȯ
°ü·Ã Ç׸ñ
¿ªÀÚ

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