fork ½Ã½ºÅÛ È£ÃâÀº ±âº»ÀûÀÎ ÇÁ·Î¼¼½º »ý¼º ÇÁ¸®¹ÌƼºêÀÌ´Ù.
ÀÌ°ÍÀ» ÅëÇÏ¿© UNIX ´Â ´ÙÁßó¸® ½Ã½ºÅÛ(multitasking system)À¸·Î
ÀüȯµÈ´Ù.
int pid;
pid = fork();
fork °¡ ¼º°øÀûÀ¸·Î ¼öÇàµÇ¸é Ä¿³ÎÀº È£ÃâÇÏ´Â ÇÁ·Î¼¼½ºÀÇ º¹»çº»À»
»õ·Î¿î ÇÁ·Î¼¼½º·Î¼ »ý¼º ÇÑ´Ù. »õ·Î »ý¼ºµÈ ÇÁ·Î¼¼½º¸¦
ÀÚ½ÄÇÁ·Î¼¼½º(child process)¶ó ÇÏ°í, fork ¸¦ È£ÃâÇÑ ÇÁ·Î¼¼½º¸¦
ºÎ¸ð ÇÁ·Î¼¼½º(parent process) ¶ó ÇÑ´Ù. fork ÀÇ È£Ãâ·Î
ÀÚ½ÄÇÁ·Î¼¼½º°¡ »ý¼ºµÈ ÈÄ¿¡´Â ºÎ¸ðÇÁ·Î¼¼½º¿Í ÀÚ½Ä
ÇÁ·Î¼¼½º°¡ µ¿½Ã¿¡ ¼öÇà µÇ¸ç, À̶§ µÎ ÇÁ·Î¼¼½º´Â fork È£Ãâ¹®ÀÇ
¹Ù·Î ´ÙÀ½ ¹®ÀåºÎÅÍ ¼öÇàÀ» °è¼ÓÇÑ´Ù.
ÇÁ·Î¼¼½º ½Äº°¹øÈ£
fork ´Â Àμö¾øÀÌ È£ÃâµÇ°í, Á¤¼öÇüÀÇ pid ¸¦ µ¹·ÁÁØ´Ù.
pid = fork();
ºÎ¸ð¿Í ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ±¸ºÐÇÏ´Â °ÍÀº pidÀÇ °ªÀÌ´Ù.
ºÎ¸ð ÇÁ·Î¼¼½º´Â pid °¡ 0 ÀÌ ¾Æ´Ñ ¾çÀÇ Á¤¼ö °ªÀ» °®´Â
¹Ý¸é ÀÚ½Ä ÇÁ·Î¼¼½º´Â 0 À» °®´Â´Ù. ºÎ¸ð¿¡°Ô·Î µ¹·ÁÁÖ´Â
pid °ªÀ» ÀÚ½Ä ÇÁ·Î¼¼½ºÀÇ ÇÁ·Î¼¼½º ½Äº°¹øÈ£(process-id)¶ó ÇÑ´Ù.
/* spawn -- demonstrate fork */
main()
{
int pid; /* hold process-id in parent */
printf("Just one process so far\n");
printf("Calling fork ...\n");
pid = fork(); /* create new process*/
if(pid == 0) printf("I'm the child\n");
else if(pid > 0)
printf("I'm the parent, child has pid %d\n", pid);
else
printf("Fork returned error code, no child\n");
}
fork µÚÀÇ if ¹®¿¡ 3 °³ÀÇ ºÐ±â(branch)°¡ Á¸ÀçÇÑ´Ù.
ù¹ø° ¹®±â´Â º¯¼ö pid °ªÀÌ 0 À϶§, ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ À§ÇÑ
µ¿ÀÛÀ» ¸í¼¼ÇÏ´Â °ÍÀÌ°í, µÎ¹ø° ¹®±â´Â pid °ªÀÌ ¾ç¼öÀ϶§¿¡
ÇØ´çÇÏ´Â °ÍÀ¸·Î, ºÎ¸ð ÇÁ·Î¼¼½º°¡ ÇؾßÇÒ µ¿ÀÛÀ» ³ªÅ¸³½´Ù.
±×¸®°í ¼¼¹ø° ºÐ±â´Â pid °¡ À½¼ö°ª(½ÇÁ¦´Â -1)À» °¡Áú ¶§¿¡
ÇØ´çÇϴµ¥, fork °¡ ÀÚ½Ä ÇÁ·Î¼¼½ºÀÇ »ý¼ºÀÌ ½ÇÆÐÇÏ¿´À» ¶§ÀÇ
µ¿ÀÛÀ» ¸»ÇØÁØ´Ù. ÀÌ·± »óȲÀº ºÎ¸ðÇÁ·Î¼¼½º°¡ ´ÙÀ½°ú °°Àº
µÎÁ¾·ùÀÇ Á¦ÇÑÀ» ±ú¶ß¸®·Á°í ÇßÀ» ¶§ ¹ß»ýÇÑ´Ù. ù°´Â ½Ã½ºÅÛ
Â÷¿ø¿¡¼ Çã¿ëµÇ´Â ÇÁ·Î¼¼½ºÀÇ °¹¼öÀÌ°í, µÑ°´Â °³º° »ç¿ëÀÚ°¡
µ¿½Ã¿¡ ¼öÇà½Ãų ¼ö ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ ¼ö¿¡ ´ëÇÑ Á¦ÇÑÀÌ´Ù. ÀÌ·±
µÎ Á¾·ùÀÇ »óȲ¿¡¼ ¿À·ùº¯¼ö errno ´Â EAGAIN À̶ó´Â Äڵ带
°ªÀ¸·Î °¡Áø´Ù.
¿Ö fork °¡ À¯¿ëÇÑ È£ÃâÀΰ¡¸¦ ³íÀÇÇØ º¸ÀÚ. °¡Àå ÇÙ½ÉÀº
fork °¡ UNIX ÀÇ ´Ù¸¥ ±â´Éµé°ú ¿¬°üµÉ¶§ ´õ À¯¿ëÇØÁø´Ù´Â °ÍÀÌ´Ù.
¿¹¸¦µé¾î fork ·Î ¸¸µé¾îÁø ºÎ¸ð¿Í ÀÚ½Ä ÇÁ·Î¼¼½º´Â UNIX ¿¡¼
Á¦°øÇÏ´Â signal À̳ª pipe µî°ú °°Àº ÇÁ·Î ¼¼½º°£ÀÇ Åë½Å±â´ÉÀ»
ÀÌ¿ëÇÏ¿© ¼·Î ÇùÁ¶ÇØ °¡¸é¼, ¼·Î °ü·ÃµÇ¾î ÀÖÁö¸¸
¼·Î ´Ù¸¥ ÀϵéÀ» ÇØ ³ª°¥ ¼ö°¡ ÀÖ´Ù.
|