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