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