Joinc¿Í ÇÔ²²ÇÏ´Â ¸®´ª½º ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö 5Àå ÇÁ·Î¼¼½º
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Contents

1 ÇÁ·Î¼¼½º¿¡ ´ëÇØ¼­
2 ÇÁ·Î¼¼½ºÀÇ »óÅÂ
3 ÇÁ·Î¼¼½ºÀÇ ¸ðµå
4 ÇÁ·Î¼¼½ºÀÇ ½ÇÇà
5 ¸ÖƼ.´ÙÁß - ÇÁ·Î¼¼½º
5.1 fork¸¦ ÀÌ¿ëÇÑ ÀÚ½ÄÇÁ·Î¼¼½º »ý¼º
5.2 fork¿Í exec¸¦ ÀÌ¿ëÇÑ »õ·Î¿î ÇÁ·Î¼¼½ºÀÇ »ý¼º
6 ÇÁ·Î¼¼½º °ü°è
6.1 ºÎ¸ðÇÁ·Î¼¼½º¿Í ÀÚ½ÄÇÁ·Î¼¼½º init ÇÁ·Î¼¼½º
6.2 ÇÁ·Î¼¼½ºÀÇ identify¿Í °ü°è¿¡¼­ÀÇ À§Ä¡
6.3 °í¾Æ ÇÁ·Î¼¼½º
6.4 Daemon ÇÁ·Î¼¼½º

1 ÇÁ·Î¼¼½º¿¡ ´ëÇØ¼­

¸®´ª½º ¿î¿µÃ¼Á¦°¡ ÇÏ´Â °¡Àå Áß¿äÇÑ ÀÏÁßÀÇ Çϳª´Â ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ´Â °ÍÀÌ´Ù. ÇÁ·Î±×·¥Àº ÄÄÇ»ÅͰ¡ ÀÌÇØÇÒ ¼ö ÀÖ´Â ¸í·É¾îµé°ú ¸í·ÉÀ» ¼öÇàÇϱâ À§ÇÑ µ¥ÀÌÅ͸¦ Æ÷ÇÔÇÑ ½ÇÇà°¡´ÉÇÑ °´Ã¼´Ù. À̵é ÇÁ·Î±×·¥Àº Çϵåµð½ºÅ©¿Í °°Àº º¸Á¶±â¾ïÀåÄ¡¿¡ À§Ä¡Çϴµ¥ ½ÇÇàÇϸé, ¿î¿µÃ¼Á¦´Â À̵éÀ» Àо ÁÖ±â¾ïÀåÄ¡¿¡ º¹»ç ÇÑ´Ù. ÇÁ·Î±×·¥ÀÌ º¹»çµÈ À̹ÌÁö°¡ ¿Ã¶ó°¡´Â °ÍÀ̶ó°í º¼ ¼ö Àִµ¥, ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ÀÇ ½ÇÇà µÈ °´Ã¼¸¦ ÇÁ·Î¼¼½ºÈ¤Àº ÇÁ·Î±×·¥ÀÇ ½ÇÇà À̹ÌÁö¶ó°í ¸»ÇÑ´Ù.


ÀÌ·¸°Ô ÇÁ·Î±×·¥À» Á÷Á¢½ÇÇà½ÃŰÁö ¾Ê°í, ¸Þ¸ð¸®·Î À̹ÌÁö¸¦ Ä«ÇÇÇØ¼­ ½ÇÇà½ÃŰ´Â µ¥¿¡´Â ´ÙÀ½°ú °°Àº ÀÌÀ¯°¡ ÀÖ´Ù.
  1. ¼­·Î ¿ÏÀüÈ÷ µ¶¸³ÀûÀÎ ÇÁ·Î±×·¥ÀÇ ½ÇÇà °¡´É
  2. ¿©·¯°³ÀÇ À̹ÌÁö¸¦ ¸¸µé ¼ö ÀÖÀ¸¹Ç·Î, ¸ÖƼÇÁ·Î¼¼½º/¸ÖƼ¾²·¹µù Áö¿ø


2 ÇÁ·Î¼¼½ºÀÇ »óÅÂ

¾Õ¼­ »ìÆìºÃµíÀÌ, ÇÁ·Î¼¼½º´Â ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ̹ÌÁö·Î µ¿½Ã¿¡ ¼ö¸¹Àº µ¿ÀÏÇÑ È¤Àº ´Ù¸¥ ÇÁ·Î±×·¥µéÀÌ ½ÇÇàµÉ ¼ö ÀÖ´Ù. µ¿½Ã¶õ ¸»¿¡ ÁÖ¸ñÇÒ Çʿ䰡 Àִµ¥, ¿©±â¿¡¼­ ¸»ÇÏ´Â µ¿½Ã´Â °°Àº ½Ã°£¿¡ ½ÇÇàµÇ´Â °ÍÀ» ÀǹÌÇÏÁö ¾Ê´Â´Ù. ¸®´ª½º ¿î¿µÃ¼Á¦¿¡¼­ µ¿½Ã¶ó´Â °ÍÀº ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º¸¦ ªÀº ½Ã°£µ¿¾È switchingÇϸ鼭 ½ÇÇàÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù. A, B, C 4°³ÀÇ ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù¸é, AÇÁ·Î±×·¥ÀÌ ³¡³¯¶§±îÁö ±â´Ù·È´Ù°¡ B¸¦ ½ÇÇàÇÏ´Â °ÍÀÌ ¾Æ´Ñ, A½ÇÇàÀ» Àá±ñ ÁߴܽÃ۰í, B·Î ½ºÀ§ÄªÇؼ­ ½ÇÇàÀ» ÇÏ°í ´Ù½Ã ÁߴܽÃ۰í, C¸¦ ½ÇÇà ÇÏ´Â ¹æ½ÄÀÌ´Ù. C¸¦ ½ÇÇàÇÑ ÈÄ¿¡´Â ´Ù½Ã ªÀº ½Ã°£¿¡ A·Î ³Ñ¾î°¡¼­ ÀÌÀüÀÇ Áß´ÜµÈ ½ÃÁ¡¿¡¼­ ´Ù½Ã ÇÁ·Î¼¼½º¸¦ ¼öÇàÇÑ´Ù.

ÀÌ·¯ÇÑ switching ½Ã°£Àº ¸Å¿ì ª±â ¶§¹®¿¡, ½ÇÁ¦·Î´Â µ¿½Ã¿¡ ½ÇÇàµÇÁö ¾ÊÁö¸¸ µ¿½Ã¿¡ ½ÇÇàµÇ´Â °Íó·³´À²¸Áø´Ù. À̰ÍÀ» time sharing ȤÀº ½ÃºÐÇÒ ¹æ½ÄÀ̶ó°í ÇÑ´Ù. ÀÌ ±â¼úÀº Unix¿¡ ±âº»ÀûÀÎ ±â´ÉÀε¥, ¾ÖÃÊ¿¡ Unix°¡ ½ÃºÐÇÒ ½Ã½ºÅÛ - time sharing system- °³¹ß ÇÁ·ÎÁ§Æ®¿¡¼­ À×ÅÂµÈ ¿î¿µÃ¼Á¦À̱⠶§¹®ÀÌ´Ù.

ÀÌ·¸°Ô (¿Ïº®ÇÑ µ¿½Ã´Â ¾Æ´ÏÁö¸¸)µ¿½Ã¿¡ ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÏ´Â °ÍÀ» ¸ÖƼŽºÅ· ¿î¿µÃ¼Á¦¶ó°í Çϸç, ½Ã°£À» Âɰ³´Â ¹æ½ÄÀ¸·Î ¸ÖƼŽºÅ·À» ±¸ÇöÇÏ´Â °ÍÀ» ½ÃºÐÇÒ ¹æ½Ä ¸ÖƼŽºÅ·À̶ó°í ÇÑ´Ù. ¸®´ª½º ¿î¿µÃ¼Á¦´Â ½ÃºÐÇÒ ¹æ½Ä ¸ÖƼŽºÅ·È¯°æÀ» Áö¿øÇÑ´Ù. ¾Æ·¡ ±×¸²Àº ½ÃºÐÇÒ ¹æ½Ä¿¡¼­ÀÇ ÇÁ·Î¼¼½º°¡ ½ÇÇàµÇ´Â ¹æ½ÄÀ» º¸¿©ÁÖ°í ÀÖ´Ù.

timeline.png

ÇÁ·Î¼¼½º°¡ Çѹø¿¡ ½ÇÇàµÇÁö ¾Ê°í, ½Ã°£À» ±âÁØÀ¸·Î switching µÊÀ¸·Î½á, ÇÁ·Î¼¼½ºÀÇ ÇöÀç »óŰ¡ Áß¿äÇØÁø´Ù. ÇÁ·Î¼¼½º°¡ Áß´ÜµÈ »óȲÀÎÁö, ½ÇÇàµÇ°í ÀÖ´ÂÁöµîÀÇ Á¤º¸¸¦ ¾Ë°í ÀÖ¾î¾ß¸¸ ¿Ã¹Ù¸¥ ½Ã°£¿¡ switchingÀÌ °¡´ÉÇϱ⠶§¹®ÀÌ´Ù.

ÇÁ·Î¼¼½º´Â ´ÙÀ½°ú °°Àº 4°¡ÁöÀÇ »óÅÂÁß Çϳª¸¦ °¡Áö°Ô µÈ´Ù.
  1. running »óÅ : ½ÇÇà°¡´ÉÇÑ »óŸ¦ ¸»ÇÑ´Ù.
  2. waiting »óÅ : ¾î¶² Á¶°ÇÀ» ±â´Ù¸®´Â »óÅÂ.
  3. stopped »óÅ : ½ÇÇàÀÌ Áß´ÜµÈ »óÅÂ.
  4. zombie »óÅ : ½ÇÇàÀÌ ³¡³ª°í, ¸Þ¸ð¸® »ó¿¡¼­ ÇÁ·Î¼¼½ºÀÇ À̹ÌÁö°¡ Á¦°Å µÇ¾úÀ¸³ª ¿î¿µÃ¼Á¦ÀÇ Ä¿³ÎÀº ¿©ÀüÈ÷ ÇÁ·Î¼¼½ºÀÇ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â »óÅÂ. zombie¿¡ ´ëÇØ¼­´Â µÚ¿¡¼­ ÀÚ¼¼È÷ ´Ù·çµµ·Ï ÇϰڴÙ.

3 ÇÁ·Î¼¼½ºÀÇ ¸ðµå

ÇÁ·Î¼¼½º´Â À¯Àú¸ðµå¿Í Ä¿³Î¸ðµåÀÇ µÎ°¡Áö ¸ðµå¸¦ ¿À°¡¸é¼­, ½ÇÇàÀÌ µÈ´Ù.
  1. À¯Àú¸ðµå : »ç¿ëÀÚ ¿¬»êÀ» À§ÇÑ ¸ðµå·Î »çÄ¢¿¬»ê°ú °°Àº ¿¬»êÀÛ¾÷À¸·Î »ç¿ëÀÚ ±ÇÇÑÀ¸·Î °¢Á¤ ¸í·ÉÀÌ ½ÇÇàµÈ´Ù.
  2. Ä¿³Î¸ðµå : ÁÖ·Î ÄÄÇ»ÅÍÀÇ ÀÚ¿øÀÎ ¸Þ¸ð¸®, Çϵåµð½ºÅ©µîÀÇ ÀåÄ¡¿¡ Á¢±ÙÇϱâ À§ÇÑ ¸ðµå·Î, Ä¿³Î±ÇÇÑÀ¸·Î ½ÇÇàµÈ´Ù.

kermode.png

±»ÀÌ ±ÍÂú°Ô Ä¿³Î¸ðµå¶ó´Â °É µÎ´Â ÀÌÀ¯´Â ÀÚ¿ø¿¡ ´ëÇÑ º¸¾ÈÀÇ ¸ñÀûÀÌ °¡Àå Å©´Ù. ¸®´ª½º´Â ´ÙÁß»ç¿ëÀÚ ¿î¿µÃ¼Á¦ÀÌ´Ù. ¸¸¾à ¸Þ¸ð¸®, »ç¿îµåÄ«µå, Çϵåµð½ºÅ©¿Í °°Àº ÀÚ¿ø¿¡ ¾Æ¹«·± Á¦ÇѾøÀÌ Á¢±ÙÀÌ °¡´ÉÇØÁø´Ù¸é, ½É°¢ÇÑ º¸¾È¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¸®´ª½º´Â Ä¿³Î¸ðµå¶ó´Â °ÍÀ» µÎ¾î¼­ À̹®Á¦¸¦ ÇØ°áÇϴµ¥, ¸¸¾à ÇÁ·Î¼¼½º°¡ ½Ã½ºÅÛÀÚ¿øÀ» »ç¿ëÇÏ±æ ¿øÇÑ´Ù¸é, Ä¿³Î¿¡¼­ Á¦°øÇÏ´Â API¸¦ ÀÌ¿ëÇØ¼­, Ä¿³Î¿¡ ÀÚ¿øÀ» »ç¿ëÇϰÚÀ½À» ¿äÃ»ÇØ¾ß¸¸ ÇÑ´Ù. ÀÌ·¸°Ô µÇ¸é, ¿î¿µÃ¼Á¦ Â÷¿ø¿¡¼­ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±ÙÀ» Á¦¾îÇÒ ¼ö ÀÖ°Ô µÉ °ÍÀÌ´Ù.

ÀÌ·¸°Ô Ä¿³Î¿¡¼­ Ä¿³Î·Î ¿äûÀ» Çϱâ À§Çؼ­ Á¦°øÇÏ´Â ÇÔ¼ö¸¦ ½Ã½ºÅÛÄÝÀ̶ó°í ºÎ¸¥´Ù. ¿ì¸®´Â ÀÌ¹Ì ¸î°³ÀÇ ½Ã½ºÅÛÄÝÀ» »ç¿ëÇØ ºÃ´Âµ¥, read(2), write(2), open(2)µîÀÌ ´ëÇ¥ÀûÀÎ ½Ã½ºÅÛÄÝÀÌ´Ù. ¿¹ÄÁµ¥, ÇÁ·Î¼¼½º´Â malloc(2)ÇÔ¼ö¸¦ È£ÃâÇØ¼­ Ä¿³Î¿¡ ¸Þ¸ð¸®ÀÇ »ç¿ëÀ» ¿äûÇÒ ¼ö ÀÖ´Ù. ¿äûÀ» ¹ÞÀº Ä¿³ÎÀº »ç¿ë °¡´ÉÇÑ ¿¬¼ÓÀûÀÎ ¸Þ¸ð¸® °ø°£¸¦ ¸¸µç ´ÙÀ½, ÀÌ ¸Þ¸ð¸® °ø°£ÀÇ ÁÖ¼Ò °ªÀ» °¡Áö´Â Æ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.

4 ÇÁ·Î¼¼½ºÀÇ ½ÇÇà

¸®´ª½º¿¡¼­ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ ½ÇÇà½ÃŰ´Â À¯ÀÏÇÑ ¹æ¹ýÀº execl(2)À» ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
#include <unistd.h> 
int execl(const char *path, const char *arg, ...); 
 
  • path : ½ÇÇàµÇ´Â ÇÁ·Î±×·¥ÀÇ ¿ÏÀüÇÑ °æ·Î´Ù.
  • arg : À̰ÍÀº ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ¶§, ³Ñ°ÜÁú ½ÇÇàÀÎÀÚµé·Î, ¿©·¯ °³°¡ Á¤ÀÇµÉ ¼ö ÀÖ´Ù. ´õÀÌ»ó ³Ñ°ÜÁú ½ÇÇàÀÎÀÚ°¡ ¾ø´Ù´Â °ÍÀ» ºÐ¸íÇÏ Çϱâ À§Çؼ­, ¸¶Áö¸·¿¡ NULLÀ» ÀÔ·ÂÇØÁà¾ß ÇÑ´Ù. °£´ÜÈ÷ ls(1)¸¦ ½ÇÇà½ÃŰ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸ÀÚ.
#include <unistd.h> 
 
int main(int argc, char **argv) 
{ 
    execl("/bin/ls", "ls", "-al", NULL); 
} 
 

execl ÇÔ¼ö´Â ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄѼ­ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇϸé, ÇöÀçÀÇ ÇÁ·Î¼¼½º À̹ÌÁö¸¦ µ¤¾î½á ¹ö¸°´Ù. ¿¹¸¦µé¾î À§ÀÇ ÇÁ·Î±×·¥À̸§ÀÌ execTestÀ̶ó°í °¡Á¤Çغ¸ÀÚ. execTest ÇÁ·Î±×·¥À» ½ÇÇà½Ã۸é, execTestÀÇ ½ÇÇàÀ̹ÌÁöÀÎ execTest ÇÁ·Î¼¼½º°¡ »ý¼ºµÉ °ÍÀÌ´Ù. ¿©±â¿¡ execlÀ» ÀÌ¿ëÇØ¼­ /bin/ls ¸¦ ½ÇÇà½Ã۸é, /bin/lsÀÇ ½ÇÇàÀ̹ÌÁö·Î ¿ÏÀüÈ÷ ´ëüµÇ¾î ¹ö¸°´Ù. ¾Æ·¡ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ º¸ÀÚ.
001  #include <unistd.h>
002  #include <stdio.h>
003  
004  int main(int argc, char **argv)
005  {
006    printf("Start\n");
007    execl("/bin/ls", "ls", "-al", NULL);
008    printf("End\n");    // ½ÇÇàµÇÁö ¾Ê´Â´Ù.
009  }
010  
´ÙÀ½Àº ½ÇÇà°á°ú´Ù.
$ ./execTest 
Start 
drwxr-xr-x  2 yundream yundream 4096 2008-02-29 00:08 . 
drwxr-xr-x 60 yundream yundream 4096 2008-02-29 00:08 .. 
-rwxr-xr-x  1 yundream yundream 6585 2008-02-29 00:08 execTest 
-rw-r-----  2 yundream yundream   81 2007-12-17 23:59 hello.txt 
-rw-r--r--  1 yundream yundream   12 2007-11-26 23:58 test.txt 
-rw-r--r--  1 yundream yundream  489 2007-11-26 23:53 write.c 
$ 
 
¿ì¼± 6¹øÂ° ÄÚµåÀÎ printf°¡ ½ÇÇàµÈ°Ç ºÐ¸íÈ÷ È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×´ÙÀ½ 7¹øÂ° ÁÙÀÎ execlÀÌ È£ÃâµÇ¾î¼­ /bin/ls -al ÀÌ ½ÇÇàµÇ¾ú´Ù. ±×·±µ¥, 8¹øÂ° ÁÙÀº ½ÇÇàµÇÁö ¾Ê¾Ò´Ù ? ¾Õ¿¡¼­ ¸»Çß´Ù ½ÃÇÇ, execlÀÌ È£ÃâµÇ¸é¼­ ÇÁ·Î¼¼½ºÀÇ À̹ÌÁö ÀÚü°¡ /bin/ls ·Î µ¤¾î½áÁ® ¹ö·È±â ¶§¹®¿¡, 8¹øÂ° Äڵ尡 ¾Æ¿¹ ½ÇÇàÀÌ µÇÁö ¾Ê±â ¶§¹®ÀÌ´Ù.

execlÀ» È£ÃâÇϸé ÇÁ·Î¼¼½ºÀÇ À̹ÌÁö¸¦ ¿ÏÀüÈ÷ µ¤¾î¾²°Ô µÈ´Ù´Â Á¡À» ÀÌÇØÇÏ´Â°Ç ±×¸® ¾î·ÆÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×·¸´Ù¸é, »õ·Î¿î ÇÁ·Î¼¼½º¸¦ È£ÃâÇÏ°í ³ª¼­, ¿ø·¡ÀÇ ÇÁ·Î±×·¥À¸·Î µÇµ¹¾Æ ¿À·Á¸é ¾î¶±ÇØ¾ß Çϳª ¶ó´Â °í¹ÎÀÌ »ý°Ü³¯ °ÍÀÌ´Ù. »õ·Î¿î ÇÁ·Î¼¼½º¸¦ ½ÇÇà½ÃŰ°í ³ª¼­, ÇÁ·Î¼¼½º°¡ Á¾·áµÇ¸é ¿ø·¡ »óÅ·ΠµÇµ¹¾Æ¿À´Â °¡Àå ´ëÇ¥ÀûÀÎ ÇÁ·Î±×·¥Àº shellÀÏ °ÍÀÌ´Ù. ½©ÀÇ ÇÁ·ÒÇÁÆ®¿¡¼­ ls ¸¦ ÀÔ·ÂÇϸé, ls ½ÇÇàµÈ ÈÄ ´Ù½Ã ½©»óÅ·ΠµÇµ¹¾Æ ¿Í¼­ ÇÁ·ÒÇÁÆ®°¡ ¶³¾îÁö´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. execl ÇÔ¼ö´Â ÇÁ·Î¼¼½º¸¦ µ¤¾î½á ¹ö¸®±â ¶§¹®¿¡, ½©°ú °°Àº ÇÁ·Î±×·¥ÀÇ Á¦ÀÛÀÌ ºÒ°¡´ÉÇÏ´Ù. ¾î¶»°Ô ½© °°Àº ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖÀ»±î ?

ÀÌ ¹®Á¦´Â fork(2)¸¦ ÀÌ¿ëÇÑ ´ÙÁß ÇÁ·Î¼¼½º »ý¼º±â¹ýÀ¸·Î ÇØ°áÇÒ ¼ö Àִµ¥, ÀÌ¿¡ ´ëÇÑ ³»¿ëÀº Á¶±Ý µÚ¿¡ ¾Ë¾Æº¸µµ·Ï ÇÒ °ÍÀÌ´Ù.

5 ¸ÖƼ.´ÙÁß - ÇÁ·Î¼¼½º

À¯´Ð½º ¿î¿µÃ¼Á¦´Â ´ÙÁß ÇÁ·Î¼¼½º¸¦ Áö¿øÇÑ´Ù°í ¾Ë°í ÀÖ´Ù. ±×·±µ¥ ¾Õ¿¡¼­ ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀº execl ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ´Â °ÍÀ̶ó°í ¹è¿ü´Ù. ¹®Á¦´Â execl ÇÔ¼ö´Â ¿øº» ÇÁ·Î¼¼½ºÀÇ À̹ÌÁö¸¦ µ¤¾î½á ¹ö¸°´Ù´Â °ÍÀ¸·Î, ÀÌ·¸°Ô µÇ¸é ¿î¿µÃ¼Á¦´Â µ¿½Ã¿¡ ´ÜÁö ÇϳªÀÇ ÇÁ·Î¼¼½º¸¸À» °¡Áú ¼ö ÀÖ°Ô µÉ °ÍÀÌ´Ù.

À¯´Ð½º ¿î¿µÃ¼Á¦´Â fork¶ó´Â ÇÁ·Î¼¼½º º¹»ç ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù. fork´Â ¿øº»ÇÁ·Î±×·¥ÀÇ º¹»çÆÇÀ» ¸¸µå´Â ÇÔ¼ö´Ù. fork¿Í execl ÇÔ¼ö´Â ºÐ¸íÈ÷ ´Ù¸£´Ù´Â Á¡À» ÀÎÁöÇϵµ·Ï ÇÏÀÚ. execlÀº ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÏÁö¸¸ fork´Â ÀÚ±âÀÚ½ÅÀ» º¹Á¦ÇÑ´Ù. Áï À¯´Ð½º ¿î¿µÃ¼Á¦¿¡¼­ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ »ý¼º½ÃŰ´Â À¯ÀÏÇÑ ¹æ¹ýÀº ¿©ÀüÈ÷ execl ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.
  +---------+        +--------------+ 
  | Process |----+---| Copy Process | 
  +---------+    |   +--------------+ 
                 |   +--------------+ 
                 +---| Copy Process | 
                 |   +--------------+ 
                 |  
                 +--- ... 
 
ÇÁ·Î¼¼½º¸¦ º¹»çÇÏ´Â°Ô Æ÷Å©¿Í ºñ½ÁÇÏ´Ù°í ÇØ¼­ fork¶ó´Â À̸§À» ºÙÀÌ°Ô µÇ¾ú´Ù.

À̶§ ¿øº» ÇÁ·Î¼¼½º¸¦ ºÎ¸ð ÇÁ·Î¼¼½º¶ó°í Çϰí, ºÎ¸ð ÇÁ·Î¼¼½º·Î ºÎÅÍ º¹»ç µÇ¾î¼­ »õ·Î »ý¼ºµÈ ÇÁ·Î¼¼½º¸¦ ÀÚ½Ä ÇÁ·Î¼¼½º¶ó°í ÇÑ´Ù. À̵é ÇÁ·Î¼¼½ºÀÇ °ü°è¿¡ ´ëÇØ¼­´Â µÚ¿¡ µû·Î »ìÆìº¸µµ·Ï ÇϰڴÙ.

ÀÌÁ¦ forkÇÔ¼ö¸¦ ÀÌ¿ëÇÔÀ¸·Î½á, execlÀÌ °¡Áö´Â ¿øº» ÇÁ·Î¼¼½º À̹ÌÁö¸¦ µ¤¾î¾²´Â¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù. fork¸¦ ÇØ¼­ ¿øº»ÇÁ·Î¼¼½ºÀÇ º¹»çº»À» ¸¸µé°í, ¿©±â¿¡¼­ execlÀ» ÀÌ¿ëÇØ¼­ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ ½ÇÇà½ÃŰ´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ½ÄÀ¸·Î ÇÁ·Î±×·¥À» »ý¼º½ÃŰ´Â °¡Àå ´ëÇ¥ÀûÀÎ ÇÁ·Î±×·¥ÀÌ ¹Ù·Î shell ÇÁ·Î±×·¥ÀÌ´Ù. shell ¿¡¼­ ls ÇÁ·Î±×·¥À» ½ÇÇà½Ã۸é, ´Ù½Ã shell·Î µÇµ¹¾Æ¿À´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ´Â shell ÀÌ ls ¸í·ÉÀ» ¹ÞÀ¸¸é forkÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸¸µé°í, ÀÌ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡¼­ execlÀ» ÀÌ¿ëÇØ¼­ ls¸¦ ½ÇÇà½Ã۱⠶§¹®¿¡ °¡´ÉÇØÁø´Ù.

ÀÌ·¸°Ô fork & execl À» ÀÌ¿ëÇϸé, ÁøÁ¤ÇÑ ¸ÖƼ ÇÁ·Î¼¼½º ȯ°æÀÌ °¡´ÉÇØ Áö°Ô µÈ´Ù. À¯´Ð½º ¿î¿µÃ¼Á¦´Â fork & execl À» ÅëÇØ¼­ »ý¼ºµÈ ¼ö¸¹Àº ÇÁ·Î¼¼½º¸¦ ½ÃºÐÇÒ¹æ½ÄÀ¸·Î µ¿½Ã¿¡ ¼öÇàÇÔÀ¸·Î½á, ¸ÖƼ ÇÁ·Î¼¼½º ȯ°æÀ» Á¦°øÇÑ´Ù.

5.1 fork¸¦ ÀÌ¿ëÇÑ ÀÚ½ÄÇÁ·Î¼¼½º »ý¼º

fork ´Â ÀÚ±âÀÚ½ÅÀ» º¹»çÇØ¼­ ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÏ´Â ¿î¿µÃ¼Á¦¿¡¼­ Á¦°øÇÏ´Â ÇÔ¼ö·Î, ±× ºÐ±âµÇ´Â ¸ð½ÀÀÌ Æ÷Å©¿Í ºñ½ÁÇÏ´Ù°í ÇØ¼­ fork¶ó°í À̸§Áö¿öÁ³´Ù.

http://lh3.ggpht.com/_Os5qf5urx_A/S3BAokS02AI/AAAAAAAABHM/dwfPuU1guYA/s400/fork.png

fork ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.
#include <unistd.h> 
 
pid_t fork(void); 
 
Äڵ峻¿¡¼­ fork(2)ÇÔ¼ö¸¦ È£ÃâÇϸé, ÀÚ½ÄÇÁ·Î¼¼½º°¡ »ý¼ºÀÌ µÈ´Ù. ÀÌ °úÁ¤Àº ÀÚ½ÄÀÌ ºÎ¸ðÀÇ À¯ÀüÇÐÀû Á¤º¸¸¦ »ó¼Ó¹Þ´Â °Í°ú ºñ½ÁÇѵ¥, ½ÇÁ¦ ÀÚ½ÄÇÁ·Î¼¼½º´Â ºÎ¸ð·Î ºÎÅÍ ¸¹Àº Á¤º¸µéÀ» ±×´ë·Î »ó¼Ó¹Þ´Â´Ù. ¿¹¸¦µéÀÚ¸é, ºÎ¸ðÇÁ·Î¼¼½ºÀÇ Á¤º¸µé, ¿­·ÁÀÖ´Â ÆÄÀÏ, signalÁ¤º¸, ¸Þ¸ð¸®¿¡ ÀÖ´Â ¸¹Àº Á¤º¸µéÀÌ´Ù. forkÇÔ¼ö°¡ ¼º°øÀûÀ¸·Î ¼öÇàµÇ¾î¼­ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ »ý¼ºµÇ¸é, ºÎ¸ðÇÁ·Î¼¼½º¿¡°Ô´Â »õ·Î »ý¼ºµÈ ÀÚ½ÄÇÁ·Î¼¼½ºÀÇ PID°¡ ¸®ÅÏÀÌ µÇ°í, ÀÚ½ÄÇÁ·Î¼¼½º¿¡°Ô´Â 0ÀÌ ¸®ÅϵȴÙ.

´ÙÀ½Àº fork¸¦ ÀÌ¿ëÇØ¼­ ÀÚ½ÄÇÁ·Î¼¼½º¸¦ »ý¼º½ÃŲ ÇÁ·Î±×·¥ÀÌ´Ù. ÇÁ·Î±×·¥ÀÇ À̸§Àº forktest.c ·Î ÇÏÀÚ.
#include <unistd.h> 
#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 
 
int main() 
{ 
    int pid; 
    int i; 
 
    i = 1000; 
    pid = fork(); 
    if (pid == -1) 
    { 
        perror("fork error "); 
        exit(0); 
    } 
    // ÀÚ½ÄÇÁ·Î¼¼½º°¡ ½ÇÇà½ÃŰ´Â ÄÚµå 
    else if (pid == 0) 
    { 
        printf("ÀÚ½Ä : ³» PID´Â %d\n", getpid()); 
        while(1) 
        { 
            printf("-->%d\n", i); 
            i++; 
            sleep(1); 
        } 
    } 
    // ºÎ¸ðÇÁ·Î¼¼½º°¡ ½ÇÇà½ÃŰ´Â ÄÚµå 
    else 
    { 
        printf("ºÎ¸ð : ³»°¡ ³ºÀº ÀÚ½ÄÀÇ PID´Â %d\n", pid); 
        while(1) 
        { 
           printf("==>%d\n", i); 
           i += 4; 
           sleep(1); 
        } 
    } 
} 
 
ÄÄÆÄÀÏ ÇÑ ÈÄ ½ÇÇà½ÃÄÑ º¸±â ¹Ù¶õ´Ù. ºÎ¸ðÇÁ·Î¼¼½º¿Í ÀÚ½ÄÇÁ·Î¼¼½º°¡ µ¿½Ã¿¡ ÁÖ¾îÁø Äڵ带 ½ÇÇà½ÃŰ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ps ¸¦ ÀÌ¿ëÇϸé À̵é ÇÁ·Î¼¼½º¿ÍÀÇ °ü°è¸¦ ¸íÈ®ÇÏ°Ô È®ÀÎÇÒ ¼ö ÀÖ´Ù.
$ ps -ef | grep forktest 
UID        PID  PPID  C STIME TTY          TIME CMD 
yundream 12119  8557  0 17:33 pts/0    00:00:00 ./forktest 
yundream 12120 12119  0 17:33 pts/0    00:00:00 ./forktest 
 
¿ì¸®´Â PID 12120À» °¡Áö´Â ÀÚ½ÄÇÁ·Î¼¼½º°¡ »ý¼ºµÇ¾úÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. PID 12120ÀÎ ÇÁ·Î¼¼½º°¡ ÀÚ½ÄÇÁ·Î¼¼½ºÀÎ °ÍÀº PPID°ªÀ» ÀÌ¿ëÇØ¼­ È®Àΰ¡´É ÇÏ´Ù. PPID ´Â parent Process IDÀÇ ÁÙÀÓ¸»ÀÌ´Ù. PID, PPID µî¿¡ ´ëÇÑ °ÍÀº ÀÌ ¹®¼­ÀÇ ÈĹݺο¡ ÀÚ¼¼È÷´Ù·çµµ·Ï ÇÒ °ÍÀÌ´Ù.

5.2 fork¿Í exec¸¦ ÀÌ¿ëÇÑ »õ·Î¿î ÇÁ·Î¼¼½ºÀÇ »ý¼º

±×·³ ¿¹Á¦ Äڵ带 ÀÌ¿ëÇØ¼­ fork & execlÀÇ ÀÛµ¿¹æ½Ä¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ¿©±â¿¡¼­ ¸¸µé°íÀÚ ÇÏ´Â ÇÁ·Î±×·¥Àº °£´ÜÇÑ shell ÇÁ·Î±×·¥ÀÌ´Ù.

001  #include <stdlib.h>
002  #include <string.h>
003  #include <unistd.h>
004  #include <stdio.h>
005  #include <sys/wait.h>
006  #include <sys/types.h>
007  
008  #define chop(str) str[strlen(str)-1] = 0x00;
009  
010  int main(int argc, char **argv)
011  {
012    char buf[256];
013    printf("My Shell\n");
014    int pid;
015    while(1)
016    {
017      // »ç¿ëÀÚ ÀÔ·ÂÀ» ±â´Ù¸°´Ù.
018      printf("# ");
019      fgets(buf, 255, stdin);
020      chop(buf);
021  
022      // ÀÔ·ÂÀÌ quit ¶ó¸é, ÇÁ·Î±×·¥À» Á¾·áÇÑ´Ù.
023      if (strncmp(buf, "quit", 4) == 0)
024      {
025        exit(0);
026      }
027  
028      // ÀÔ·ÂÇÑ ¸í·ÉÀÌ ½ÇÇà°¡´ÉÇÑ ÇÁ·Î±×·¥À̶ó¸é
029      // fork ÇÑÈÄ execlÀ» ÀÌ¿ëÇØ¼­ ½ÇÇàÇÑ´Ù.
030      if (access(buf, X_OK) == 0)
031      {
032        pid = fork();
033        if (pid < 0)
034        {
035          fprintf(stderr, "Fork Error");
036        }
037        if (pid == 0)
038        {
039          if(execl(buf, buf, NULL) == -1)
040            fprintf(stderr, "Command Exec Error\n\n");
041          exit(0);
042        }
043        if (pid > 0)
044        {
045          // ºÎ¸ð ÇÁ·Î¼¼½º´Â ÀÚ½ÄÇÁ·Î¼¼½º°¡ Á¾·áµÇ±æ ±â´Ù¸°´Ù.
046          int status;
047          waitpid(pid, &status, WUNTRACED);
048        }
049      }
050      else // ¸¸¾à ½ÇÇà°¡´ÉÇÑ ÇÁ·Î±×·¥ÀÌ ¾Æ´Ï¶ó¸é, ¿¡·¯¸Þ½ÃÁö¸¦ Ãâ·Â
051      {
052          fprintf(stderr, "Command Not Found\n\n");
053      }
054    }
055  }
056  
ÀÌ ÇÁ·Î±×·¥Àº ¾ÆÁÖ °£´ÜÇÑ shellÀ¸·Î, ÇÁ·Î±×·¥ÀÇ ÀÎÀÚ¸¦ ó¸®ÇÏÁöµµ ¸øÇÏÁö¸¸, fork ¿Í execlÀ» ¼³¸íÇϴµ¥¿¡´Â ºÎÁ·ÇÔÀÌ ¾øÀ» °ÍÀÌ´Ù. ´ÙÀ½Àº ½ÇÇà½ÃŲ ¿¹ÀÌ´Ù. ÇÁ·Î±×·¥À̸§Àº myshell ·Î Çß´Ù.
MY Shell 
$ myshell 
# /usr/bin/w 
 01:15:32 up  2:58,  4 users,  load average: 0.47, 0.50, 0.62 
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT 
yundream :0       -                00:05   ?xdm?  14:20m  0.05s /bin/bash /usr/ 
yundream pts/1    :0               00:06    9.00s  1.47s  1.24s w3m -F http://w 
yundream pts/3    :0               00:54    0.00s  0.22s  0.00s ./myshell 
yundream pts/4    :0.0             00:53   22:13m  0.40s  0.27s BitchX irc.nuri 
 
# ll 
Command Not Found 
 
# quit 
$ 
 

6 ÇÁ·Î¼¼½º °ü°è

6.1 ºÎ¸ðÇÁ·Î¼¼½º¿Í ÀÚ½ÄÇÁ·Î¼¼½º init ÇÁ·Î¼¼½º

À§¿¡¼­ fork¿Í exec ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÇÁ·Î¼¼½º¸¦ ½ÇÇà½ÃŰ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸¾Ò´Ù. ¿©±â¿¡¼­ ¿ì¸®´Â ÇÁ·Î¼¼½º°¡ ÀüÇô µ¶¸³ÀûÀ¸·Î »ý¼ºµÇ´Â°Ô ¾Æ´Ñ, ºÎ¸ð ÇÁ·Î¼¼½º¿¡¼­ »ý±ä´Ù´Â °Íµµ ´ýÀ¸·Î ¹è¿ì°Ô µÇ¾ú´Ù. ºÎ¸ðÇÁ·Î¼¼½º°¡ ÀÖ´Ù¸é, ÀڽϹÀÌ µÇ´Â ÇÁ·Î¼¼½º°¡ ÀÖÀ» °ÍÀÌ´Ù. ºÎ¸ðÇÁ·Î¼¼½º·Î ºÎÅÍ forkµÇ¾î»õ »ý¼ºµÈ ÇÁ·Î¼¼½º¸¦ ÀÚ½Ä ÇÁ·Î¼¼½º¶ó°í ºÎ¸¥´Ù.

ºÎ¸ðÇÁ·Î¼¼½º¿Í ÀÚ½ÄÇÁ·Î¼¼½ºÀÇ °ü°è´Â ½±°Ô ÀÌÇØµÇ¾úÀ» °ÍÀÌ´Ù. ±×·¸´Ù¸é, ºÎ¸ðÀÇ ºÎ¸ðÀÇ ºÎ¸ðÀÇ ºÎ¸ðÀÇ ÇÁ·Î¼¼½º°¡ ÀÖÀ» °ÍÀ̰í, ÃÖÃÊÀÇ ¾Æ´ã°ÝÀÎ ÇÁ·Î¼¼½º°¡ ÀÖÀ¸¸®¶ó´Â°É Ã߸®ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¹Ù·Î init°¡ ¸ðµç ÇÁ·Î¼¼½ºÀÇ Á¶»óÀÌ µÇ´Â ÇÁ·Î¼¼½º´Ù. ¸ðµç ÇÁ·Î¼¼½º´Â init·Î ºÎÅÍ fork & exec µÇ¾î¼­ »ý¼ºÀÌ µÈ´Ù. pstree¸í·ÉÀ» ÀÌ¿ëÇϸé, ÇÁ·Î¼¼½ºÀÇ °ü°è¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù.
$ pstree 
init¦¡¦¨¦¡NetworkManager¦¡¦¡¦¡{NetworkManager} 
     ¦§¦¡NetworkManagerD 
     ¦§¦¡acpid 
     ¦§¦¡amarok¦¡¦¡¦¡11*[{amarok}] 
     ¦§¦¡atd 
     ¦§¦¡avahi-daemon¦¡¦¡¦¡avahi-daemon 
     ¦§¦¡bonobo-activati¦¡¦¡¦¡{bonobo-activati} 
     ¦§¦¡console-kit-dae¦¡¦¡¦¡61*[{console-kit-dae}] 
     ¦§¦¡cron 
     ¦§¦¡cupsd 
     ¦§¦¡2*[dbus-daemon] 
     ¦§¦¡dbus-launch 
       .... 
 

6.2 ÇÁ·Î¼¼½ºÀÇ identify¿Í °ü°è¿¡¼­ÀÇ À§Ä¡

ÇÁ·Î¼¼½º´Â ¿î¿µÃ¼Á¦À§¿¡¼­ ½ÇÇàµÇ´Â ½ÇÇఴüÀÌ´Ù. °´Ã¼°¡ °´Ã¼·Î½á Á¤Ã¼¼ºÀ» °¡Áö±â À§Çؼ­´Â ´Ù¸¥°´Ã¼¿Í ÀÚ½ÅÀ» ºÐ¸®ÇÒ ¼ö ÀÖ´Â identify ¸¦ °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù.

°¢ ÇÁ·Î¼¼½º´Â ´ÙÀ½ÀÇ 2°¡Áö ¿ä¼Ò¸¦ ÀÌ¿ëÇØ¼­ ÀÚ½ÅÀÇ identify ¸¦ È®º¸ÇÒ ¼ö ÀÖ´Ù.
  1. name : ÇÁ·Î¼¼½ºÀÇ À̸§ÀÌ´Ù.
  2. PID : Process ID·Î ¿î¿µÃ¼Á¦°¡ °¢°¢ÀÇ ÇÁ·Î¼¼½º¿¡ ºÎ¿©ÇÏ´Â À¯ÀÏÇÑÀÏ·Ã ¹øÈ£´Ù. ÇÁ·Î¼¼½ºÀÇ À̸§¸¸À¸·Îµµ identify¸¦ È®º¸ÇÒ ¼ö ÀÖÀ»°Å¶ó°í »ý°¢ÇÒ ¼ö ÀÖÁö¸¸ À̸§ÀÌ °°Àº ÇÁ·Î¼¼½º°¡ »ý¼ºµÉ ¼ö ÀÖÀ¸¹Ç·Î, name¸¸ °¡Áö°í´Â identify¸¦ È®º¸ÇÒ ¼ö ¾ø´Ù. ¶§¹®¿¡ ¿î¿µÃ¼Á¦¿¡¼­ ÀϷùøÈ£¸¦ ºÎ¿©ÇÏ°Ô µÈ´Ù. ÀÌ ¹øÈ£´Â Áߺ¹µÇÁö ¾Ê´Â À¯ÀÏÇÑ ¹øÈ£´Ù. ÀÏÁ¾ÀÇ Áֹεî·Ï¹øÈ£ Á¤µµ·Î º¸¸é µÉ °Å °°´Ù.

ÇÁ·Î¼¼½º À̸§°ú PID ¸¦ ÀÌ¿ëÇØ¼­ ÇÁ·Î¼¼½º¸¦ identify(½Äº°)ÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. ÇÏÁö¸¸ À̰͸¸À¸·Î´Â ºÎÁ·ÇÏ´Ù. ÇÁ·Î¼¼½º´Â ¿î¿µÃ¼Á¦ À§¿¡¼­ µ¶¸³ÀûÀ¸·Î Á¸ÀçÇÏÁö¸¸ ¶ÇÇÑ ´Ù¸¥ ÇÁ·Î¼¼½ºµé°ú °ü°è¸¦ ¸Î°í Àֱ⠶§¹®ÀÌ´Ù. ¾î¶² ÇÁ·Î¼¼½º´Â ¹Ýµå½Ã ¾î¶² ÇÁ·Î¼¼½ºÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ µÇ¾î¾ß ÇÑ´Ù. ȤÀº ´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ ºÎ¸ð°¡ µÇ±âµµ ÇÑ´Ù.

Áï ÇÁ·Î¼¼½ºÀÇ identify¿Í ÇÔ²², ÇÁ·Î¼¼½ºÀÇ °ü°è¿¡¼­ÀÇ À§Ä¡µµ Á¤ÀÇÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.

±×·¡¼­, °¢ ÇÁ·Î¼¼½º´Â name°ú PID¿Ü¿¡µµ ÇÁ·Î¼¼½º±º¿¡¼­ÀÇ ÀÚ½ÅÀÇ À§Ä¡¸¦ Á¤ÀÇÇϱâ À§ÇÑ ´ÙÀ½°ú °°Àº Á¤º¸µéÀ» °¡Áø´Ù.
  1. PPID : ºÎ¸ðÇÁ·Î¼¼½ºÀÇ ID·Î ¾î¶² ÇÁ·Î¼¼½º·Î ºÎÅÍ »ý¼ºÀÌ µÇ¾ú´ÂÁö¸¦ ¾Ë·ÁÁØ´Ù.
  2. PGID : ÇÁ·Î¼¼½º´Â ¿©·¯°³ÀÇ ÀÚ½ÄÇÁ·Î¼¼½º¸¦ ¸¸µé¾î³¾ ¼ö ÀÖ´Ù. ±×·¸´Ù¸é, À̵é ÇÁ·Î¼¼½º´Â {ºÎ¸ð-->{ÀÚ½Ä,ÀÚ½Ä,ÀÚ½Ä}}°ú °°ÀÌ ÇϳªÀÇ °¡°è¸¦ ¸¸µé ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿î¿µÃ¼Á¦¿¡¼­´Â À̰ÍÀ» °¡°è¶ó°í ÇÏ´Â ´ë½Å groupÀ̶ó°í ÇÑ´Ù. PGID´Â ÇÁ·Î¼¼½º°¡ ¾î´À ±×·ì¿¡ Æ÷ÇԵǾî ÀÖ´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë·ÁÁØ´Ù. PGID´Â ÀϷùøÈ£·Î µÇ¾î ÀÖÀ¸¸ç, º¸Åë ºÎ¸ðÇÁ·Î¼¼½ºÀÇ PIDÁï PPID°¡ PGID°¡ µÈ´Ù. Áï ÇÁ·Î¼¼½º±×·ìÀº ºÎ¸ðÇÁ·Î¼¼½ºÀÇ PID¸¦ °øÅëºÐ¸ð·Î ÇØ¼­ ÇϳªÀÇ ±×·ìÀ» ¸¸µé°Ô µÈ´Ù.

À§ÀÇ forktest.c ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ°í ´ÙÀ½°ú °°ÀÌ ps ¸¦ ÀÌ¿ëÇØ¼­ ÇÁ·Î¼¼½º Á¤º¸¸¦ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.
$ ps -efjc | grep forktest  
UID        PID  PPID  PGID   SID CLS PRI STIME TTY          TIME CMD 
yundream 12198  8557 12198  8557 TS   24 17:40 pts/0    00:00:00 ./forktest 
yundream 12199 12198 12198  8557 TS   21 17:40 pts/0    00:00:00 ./forktest 
 
ÇÁ·Î¼¼½ºÀÇ »ó¼¼Á¤º¸µéÀÌ Ãâ·ÂµÊÀ» ¾Ë ¼ö ÀÖ´Ù. PID°¡ 12199ÀÎ ÇÁ·Î¼¼½º°¡ 12198·Î ºÎÅÍ »ý¼ºµÈ ÀÚ½ÄÇÁ·Î¼¼½ºÀÓÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ 12198 ÇÁ·Î¼¼½º´Â PID 8557 ·Î ºÎÅÍ »ý¼ºµÈ ÀÚ½Ä ÇÁ·Î¼¼½ºÀÓÀ» ¹Ì·ç¾î ÁüÀÛÇÒ ¼ö ÀÖ´Ù. ±×·¸´Ù¸é PID 8557ÀÎ ÇÁ·Î¼¼½º°¡ ¾î¶² ÇÁ·Î¼¼½ºÀÎÁö È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ.
$ ps -efjc | grep 8557 
UID        PID  PPID  PGID   SID CLS PRI STIME TTY          TIME CMD 
yundream  8557  8550  8557  8557 TS   24 13:37 pts/0    00:00:00 bash 
 
±×·¸´Ù. bash ÇÁ·Î±×·¥ÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. bash´Â ¿ì¸®°¡ forktest ÇÁ·Î±×·¥À» ½ÇÇà½ÃŲ ½©ÇÁ·Î±×·¥À¸·Î, bashµµ fork()¸¦ ÀÌ¿ëÇØ¼­ forktest ¸¦ ½ÇÇà½ÃÄ×À» °ÍÀÓÀ¸·Î forktestÀÇ ºÎ¸ðÇÁ·Î¼¼½º°¡ µÈ´Ù. À̵éÀÇ °ü°è´Â ´ÙÀ½°ú °°Àº Tree ÇüÅ·ΠǥÇöÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
        fork&exec                    fork 
  bash ---+----------- forktest ---+-------- forktest 
 
bashÀÇ ºÎ¸ðÇÁ·Î¼¼½º´Â PID 8550À» °¡Áö´Â ÇÁ·Î¼¼½ºÀÏ °ÍÀ̰í, °Å½½·Î ¿Ã¶ó°¡¸é °á±¹ init ÇÁ·Î¼¼½º¸¦ ¸¸³ª°Ô µÉ °ÍÀÌ´Ù.

±×·¸´Ù¸é ¿Ö ±×·ìÀÌ Áß¿äÇÑ °É±î. ´ÜÁö ºÐ·ùÇϱâ ÁÁ°Ô Çϱâ À§Çؼ­ ? ¹°·Ð ±×·±ÀÌÀ¯µµ ÀÖ±â´Â ÇÏÁö¸¸, Á» ´õ ±Ùº»ÀûÀÎ ÀÌÀ¯°¡ ÀÖ´Ù.

±×·ìÀº ½Ç»ýȰ¿¡¼­ÀÇ °¡Á·µéÀÌ ±×·¸µíÀÌ, °øÅëÀÇ ÀÚ¿øÀ» °øÀ¯ÇÏ´Â °ü°è·Î ¼­·Î¿¡°Ô ¿µÇâÀ» ³¢Ä£´Ù. Áï ºÎ¸ðÇÁ·Î¼¼½º°¡ Á¾·áµÇ¸é ÀÚ½Ä ÇÁ·Î¼¼½ºµµ µû¶ó¼­ Á¾·áµÇ¾î¹ö¸®°Å³ª ºÎ¸ð·ÎºÎÅÍ ¹ö·ÁÁø °í¾Æ°¡ µÇ´Â µîÀÇ ¿µÇâÀ» ¹Þ´Â´Ù. ¶ÇÇÑ ºÎ¸ðÇÁ·Î¼¼½º´Â ÀÚ½ÄÇÁ·Î¼¼½º¸¦ Á¾·á½Ãų ¼ö ÀÖÀ¸¸ç, ¾Æ¿¹ ºÐ°¡½ÃÄѹö¸± ¼öµµ ÀÖ´Ù.

ºÎ¸ð¿Í ÀÚ½ÄÇÁ·Î¼¼½º°£ÀÇ ¾î¶² ¸Åü¸¦ ÀÌ¿ëÇØ¼­ ¼ÒÅë ÀÌ·ç¾îÁø´Ù´Â °Çµ¥, ¸®´ª½º ¿î¿µÃ¼Á¦´Â signalÀ̶ó´Â ¸Åü¸¦ ÀÌ¿ëÇØ¼­, ºÎ¸ð¿Í ÀÚ½ÄÇÁ·Î¼¼½º°£¿¡ ¼ÒÅëÀ» ÇÑ´Ù. ¿¹¸¦µéÀÚ¸é ºÎ¸ðÇÁ·Î¼¼½º°¡ ³Ê ±×³É Á×¾î¶ó¶ó°í ½ÅÈ£¸¦ º¸³»°Ç³ª º¸³»Áö ¾Ê´Â ½ÄÀÌ´Ù. ¸¸¾à ºÎ¸ðÇÁ·Î¼¼½º°¡ Á×À¸¸é¼­, ÀÚ½ÄÇÁ·Î¼¼½ºµé¿¡°Ô ³ÊÈñµµ µû¶ó¼­ Á×¾î¶ó - Á» ÀÜÀÎÇѰ¡? - ¶ó°í Çϸé, ÀÚ½ÄÇÁ·Î¼¼½ºµéµµ ÇÔ²² Á×´Â °Å°í, Àڱ⸸ Á×°Ú´Ù°í ÇÏ°í ½ÅÈ£¸¦ º¸³»Áö ¾Ê´Â´Ù¸é, ÀÚ½ÄÇÁ·Î¼¼½º´Â °í¾ÆÇÁ·Î¼¼½º°¡ µÇ´Â ½ÄÀÌ´Ù.

signalÀÇ »ç¿ë°ú °í¾ÆÇÁ·Î¼¼½º¿¡ ´ëÇÑ °ÍÀº µû·Î ¾ð±ÞµÉ °ÍÀÌ´Ù.

6.3 °í¾Æ ÇÁ·Î¼¼½º

À§¿¡¼­ ÇÁ·Î¼¼½º´Â ºÎ¸ðÇÁ·Î¼¼½º¿Í ±×·ìÀ» ¸Î´Â´Ù´Â °ÍÀ» ¹è¿ü´Ù. ±×¸®°í °í¾Æ ÇÁ·Î¼¼½º¿¡ ´ëÇØ¼­µµ °£´ÜÇÏ°Ô ¾Ë¾Æº¸¾Ò´Ù. °í¾Æ ÇÁ·Î¼¼½º¶õ Áï, ºÎ¸ðÇÁ·Î¼¼½º°¡ Á×À¸¸é¼­ ÀڽŸ¸ Á׾ ÀÚ½ÄÇÁ·Î¼¼½º´Â ±×´ë·Î ³²¾ÆÀÖ´Â »óÅ´Ù. ºÎ¸ðÇÁ·Î¼¼½º°¡ Á×¾úÀ¸´Ï °í¾Æ°¡ µÉ¼ö ¹Û¿¡...!!!

°í¾Æ ÇÁ·Î¼¼½º´Â ¾î¶»°Ô µÉ±î. ±×³É ¹ö·ÁÁú±î ? ±×·¸´Ù¸é ³Ê¹« ºñÁ¤ÇÑ°Í °°´Ù´Â »ý°¢ÀÌ µç´Ù. À¯´Ð½º ¿î¿µÃ¼Á¦¸¦ ¸¸µé´ø °³¹ßÀÚµéÀÌ ¸Å¿ì Àΰ£ÀûÀÌ¿©¼­ ±×·¨´ÂÁö´Â ¸ð¸£°ÚÁö¸¸ À̵éÀº °í¾Æ°¡µÈ ÇÁ·Î¼¼½º¸¦ init ÇÁ·Î¼¼½º°¡ °ü¸®Çؼ­ ¹ö·ÁÁöÁö ¾Êµµ·Ï ¼³°è¸¦ Çß´Ù. Çö½Ç¿¡¼­ °í¾Æ¸¦ ¹ö¸®Áö ¾Ê°í, »çȸ¿¡¼­ º¸È£ÇÏ´Â °Íó·³ ¸»ÀÌ´Ù.

ÀÌ·ÐÀûÀ¸·Î °í¾Æ ÇÁ·Î¼¼½º´Â ¾ÆÁÖ °£´ÜÇÏ°Ô ¸¸µé¼ö ÀÖ´Ù. ÀÚ½ÄÇÁ·Î¼¼½º¸¦ »ý¼º½ÃŲ ÈÄ ºÎ¸ðÇÁ·Î¼¼½º¸¦ Á¾·á½Ã۱⸸ ÇÏ¸é µÈ´Ù.

À§ÀÇ forktest.c¿¡¼­ ÀÚ½Ä ÇÁ·Î¼¼½º°¡ °í¾Æ ÇÁ·Î¼¼½º°¡ µÇµµ·Ï ¼öÁ¤ÇØ º¸¾Ò´Ù. ÇÁ·Î±×·¥ÀÇ À̸§Àº forktest2.c ·Î ÇϰڴÙ.
#include <unistd.h> 
#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 
 
int main() 
{ 
    int pid; 
    int i; 
 
    i = 1000; 
    pid = fork(); 
    if (pid == -1) 
    { 
        perror("fork error "); 
        exit(0); 
    } 
    // ÀÚ½ÄÇÁ·Î¼¼½º°¡ ½ÇÇà½ÃŰ´Â ÄÚµå 
    else if (pid == 0) 
    { 
        printf("ÀÚ½Ä : ³» PID´Â %d\n", getpid()); 
        while(1) 
        { 
            printf("-->%d\n", i); 
            i++; 
            sleep(1); 
        } 
    } 
    // ºÎ¸ðÇÁ·Î¼¼½º°¡ ½ÇÇà½ÃŰ´Â ÄÚµå 
    else 
    { 
        printf("ºÎ¸ð : ³»°¡ ³ºÀº ÀÚ½ÄÀÇ PID´Â %d\n", pid); 
        sleep(1); 
        printf("T.T ³ªÁ׳×\n"); 
        exit(0); 
    } 
} 
 
ÀÌÁ¦ ½ÇÇà½ÃÄÑ º¸µµ·Ï ÇÏÀÚ.
$ ./forktest  
ºÎ¸ð : ³»°¡ ³ºÀº ÀÚ½ÄÀÇ PID´Â 8207 
ÀÚ½Ä : ³» PID´Â 8207 
-->1000 
T.T ³ªÁ×³× 
-->1001 
yundream@yundream-desktop:~$ -->1002 
-->1003 
 
yundream@yundream-desktop:~$ -->1004 
-->1005 
-->1006 
-->1007 
-->1008 
 
½©°ú´Â µû·Î ÀÚ½ÄÇÁ·Î¼¼½º°¡ °è¼Ó ½ÇÇàµÇ´Â°É ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌÁ¦ Ctrl+C ¸¦ ´­·¯º¸ÀÚ. Ctrl+C¸¦ ´©¸£¸é ÀϹÝÀûÀ¸·Î ÇÁ·Î¼¼½º´Â Á¾·á°¡ µÈ´Ù´Â °ÍÀ» °æÇèÀûÀ¸·Î ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. - Á¤È®È÷ ¸»ÇÏÀÚ¸é SIGINT¶ó´Â ½Ã±×³ÎÀÌ Àü´ÞµÇ°í, ÀÌ¿¡ ´ëÇÑ ¹ÝÀÀÀ¸·Î ÇÁ·Î¼¼½º°¡ Á״´Ù. ½Ã±×³ÎÀº ³ªÁß¿¡ ´Ù·ê °ÍÀÌ´Ù -. ±×·¯³ª Ctrl+C¸¦ ¾Æ¹«¸® ´­·¯µµ ÀÚ½ÄÇÁ·Î¼¼½º°¡ Á×Áö ¾Ê´Â°É ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿Ö³ÄÇϸé, bash ÀÇ ÀÚ½ÄÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º, Áï °°Àº ±×·ì¿¡ ¼ÓÇÏÁö ¾ÊÀº ÀüÇô ´Ù¸¥ ±×·ìÀÇ ÇÁ·Î¼¼½º°¡ µÇ¾ú±â ¶§¹®ÀÌ´Ù. ps °á°ú·Î È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ.

#ps -efjc | grep forktest 
UID        PID  PPID  PGID   SID CLS PRI STIME TTY          TIME CMD 
yundream  8207     1  8206  8093 TS   24 00:16 pts/5    00:00:00 ./forktest 
 
PPID°¡ 1 Áï initÀÇ ÀÚ½ÄÇÁ·Î¼¼½º°¡ µÇ¾úÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. Áýµµ Àýµµ ¾ø´Â °í¾ÆÇÁ·Î¼¼½º¶ó´Â ¾ê±â°¡ µÇ°Ú´Ù.

6.4 Daemon ÇÁ·Î¼¼½º

°í¾ÆÇÁ·Î¼¼½º´Â ¾î°¨ÀÌ ÁÁÁö ¾Ê¾Æ º¸À̱â´Â ÇÏÁö¸¸, ÇÁ·Î¼¼½ºÀÇ ¶Ç´Ù¸¥ °¡´É¼ºÀ» º¸¿©ÁØ´Ù. Áï ÇöÀç À¯Àú¿Í ÇÁ·Î¼¼½ºÀÇ ¿µÇâÀ» ¹ÞÁö ¾Ê°í ¹é±×¶ó¿îµå¿¡¼­ ½ÇÇàµÇ´Â ÇÁ·Î¼¼½ºÀÇ Á¦ÀÛ¿¡ °üÇÑ °ÍÀÌ´Ù.

ÀÌ·¸°Ô ÇöÀç È­¸é°ú ÇÁ·Î¼¼½º¿¡¼­ ¶³¾îÁ® ³ª°¡¼­ µ¶¸³ÀûÀ¸·Î ½ÇÇàµÇ´Â ÇÁ·Î¼¼½º¸¦ µ¥¸ó ÇÁ·Î¼¼½º¶ó°í ÇÑ´Ù. °¡Àå ´ëÇ¥ÀûÀÎ ÇÁ·Î±×·¥ÀÌ À¥¼­ºñ½º¸¦ À§ÇÑ À¥¼­¹ö ÇÁ·Î±×·¥ÀÏ °ÍÀÌ´Ù. ÀÌ·± ÇÁ·Î±×·¥µéÀº °ÅÀÇ ¿î¿µÃ¼Á¦°¡ ½ÃÀ۵ʰú µ¿½Ã¿¡ ½ÃÀ۵Ǿ ¿î¿µÃ¼Á¦°¡ ³¡³¯¶§±îÁö µÚ¿¡¼­ ¿ì¸®°¡ ´«Ä¡Ã¤Áö ¸øÇÏ´Â »óÅ¿¡¼­½ÇÇàÀÌ µÈ´Ù.

µ¥¸óÇÁ·Î¼¼½º°¡ µÇ·Á¸é ´ÙÀ½°ú °°Àº Á¶°ÇÀ» °®Ãß¾î¾ß ÇÑ´Ù.
  1. ÀÏ´Ü °í¾Æ ÇÁ·Î¼¼½º°¡ µÇ¾î¾ß ÇÑ´Ù.
    µ¥¸ó ÇÁ·Î¼¼½º´Â ¿ÏÀüÈ÷ µ¶¸³µÈ ÇÁ·Î¼¼½º´Ù. ±×·¯¹Ç·Î °í¾Æ ÇÁ·Î¼¼½º°¡ µÇ¾î¾ß ÇÑ´Ù. ¿¹ÄÁµ¥, °¡Á·À¸·Î ºÎÅÍ µ¶¸³Çؼ­ »çȸ·Î ³ª°¡¾ß µÈ´Ù´Â ¾ê±â°¡ µÇ°Ú´Ù.
  2. Ç¥ÁØÀÔ·Â, Ç¥ÁØÃâ·Â, Ç¥ÁØ¿¡·¯À» ´Ý´Â´Ù.
    Ç¥ÁØÀԷ°ú Ç¥ÁØÃâ·Â, Ç¥ÁØ¿¡·¯´Â »ç¿ëÀÚ¿Í ÇÁ·Î¼¼½º°¡ »óÈ£ÀÛ¿ë Çϱâ À§ÇÑ ÀåÄ¡·Î, Ç¥ÁØÀÔ·ÂÀº Űº¸µå, Ç¥ÁØÃâ·ÂÀº ¸ð´ÏÅÍ·Î ´ëÀÀµÈ´Ù. µ¥¸ó ÇÁ·Î¼¼½º´Â µÚ¿¡¼­ µ¶¸³ÀûÀ¸·Î µ¹¾Æ°¡´Â ÇÁ·Î¼¼½º À̹ǷΠ»ç¿ëÀÚ¿ÍÀÇ »óÈ£ÀÛ¿ëÀ» ÇØ¼­´Â ¾ÈµÈ´Ù. ±×·¯¹Ç·Î Ç¥ÁØÀԷ°ú Ç¥ÁØÃâ·ÂÀ» Ç¥ÁØ¿¡·¯¸¦ ´Ý¾ÆÁÙ Çʿ䰡 ÀÖ´Ù. µÚ¿¡¼­ È¥ÀÚ µ¹¾Æ¾ß ÇÏ´Â ÇÁ·Î±×·¥Àε¥, ¸ð´ÏÅÍ¿¡ (forktest2.c ¿Í °°ÀÌ) Àâ´ÙÇÑ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇØ¼­´Â ¾ÈµÉ °ÍÀ̱⠶§¹®ÀÌ´Ù. ÀÌ·± µ¥¸óÇÁ·Î¼¼½º¿ÍÀÇ »óÈ£ÀÛ¿ëÀº IPCȤÀº ·Î±× ÆÄÀÏ µîÀ» ÅëÇØ¼­ ÀÌ·ç¾îÁø´Ù. IPC´Â Inter Process Communication ÀÇ ÁÙÀÓ¸»·Î ÇÁ·Î¼¼½º°£ ³»ºÎÅë½ÅÀ» À§Çؼ­ »ç¿ëµÇ´Â ¼³ºñÀÌ´Ù. ȸ»ç³»ºÎ¿¡¼­ ºÎ¼­¿ø°£ ÅëÈ­¸¦ À§ÇØ »ç¿ëµÇ´Â ÀüÈ­¶ó°í º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ¿¡ ´ëÇÑ ³»¿ëÀº º°µµÀÇ ÀåÀ» ÇÒ¾ÖÇØ¼­ ´Ù·çµµ·Ï ÇÒ°ÍÀÌ´Ù.
  3. Å͹̳ÎÀ» °¡ÁöÁö ¾Ê´Â´Ù.
    terminal(Å͹̳Î)À̶õ »ç¿ëÀÚ°¡ ÄÄÇ»ÅÍ¿¡ Á¢¼ÓµÈ »óŸ¦ ¸»ÇÑ´Ù. ÀÌ Å͹̳ο¡ Űº¸µå¿Í ¸ð´ÏÅÍ¿Í °°Àº ÀåÄ¡°¡ ¿¬°áµÇ¾î ÀÖ°í, À̰ÍÀ» ÀÌ¿ëÇØ¼­ »ç¿ëÀÚÀÇ ÇÁ·Î¼¼½º°¡ ÄÄÇ»ÅÍ¿Í ¿¬°áÀÌ µÈ´Ù. µ¥¸ó ÇÁ·Î¼¼½º´Â »ç¿ëÀÚ È¯°æ°ú µ¶¸³µÇ¾î¾ß ÇϹǷΠÅ͹̳ÎÀ» ²÷¾îÁà¾ß ÇÑ´Ù.

±×·¸´Ù¸é, °í¾Æ ÇÁ·Î¼¼½º¸¦ ¸¸µç´ÙÀ½ °í¾Æ ÇÁ·Î¼¼½º·Î ºÎÅÍ Ç¥ÁØÀÔ·Â,Ãâ·Â,¿¡·¯¸¦ ´Ý°í Å͹̳ÎÀ» Á¦°Å½ÃŰ¸é µ¥¸ó ÇÁ·Î¼¼½º°¡ µÉ °ÍÀ̶ó´Â °ÍÀ» ¿¹»ó ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. µ¥¸ó ÇÁ·Î¼¼½º¸¦ ¸¸µå´Â°Ç ÀÌ 3°¡ÁöÀÇ °úÁ¤ÀÇ ÄÚµåÈ­´Ù.

´ÙÀ½Àº ¿ÏÀüÇÑ µ¥¸ó ÇÁ·Î¼¼½º´Ù. ÇÁ·Î±×·¥À̸§Àº daemon.c·Î ÇÏÀÚ.
001  #include <unistd.h>
002  #include <stdlib.h>
003  #include <string.h>
004  #include <stdio.h>
005  
006  int main()
007  {
008      int pid;
009      int i;
010  
011      i = 1000;
012      pid = fork();
013      if (pid == -1)
014      {
015          perror("fork error ");
016          exit(0);
017      }
018      // ÀÚ½ÄÇÁ·Î¼¼½º°¡ ½ÇÇà½ÃŰ´Â ÄÚµå
019      else if (pid == 0)
020      {
021          printf("ÀÚ½Ä : ³» PID´Â %d\n", getpid());
022          close(0);
023          close(1);
024          close(2);
025          setsid();
026          while(1)
027          {
028              printf("-->%d\n", i);
029              i++;
030              sleep(1);
031          }
032      }
033      // ºÎ¸ðÇÁ·Î¼¼½º°¡ ½ÇÇà½ÃŰ´Â ÄÚµå
034      else
035      {
036          printf("ºÎ¸ð : ³»°¡ ³ºÀº ÀÚ½ÄÀÇ PID´Â %d\n", pid);
037          sleep(1);
038          printf("T.T ³ªÁ׳×\n");
039          exit(0);
040      }
041  }
042  
  1. 39 ¿¡¼­ ºÎ¸ðÇÁ·Î¼¼½º¸¦ Á¾·áÇÑ´Ù.
  2. 22,23,24 ¿¡¼­ Ç¥ÁØÀÔ·Â,Ç¥ÁØÃâ·Â,Ç¥ÁØ¿¡·¯¸¦ ´Ý¾Ò´Ù.
  3. setsid()¸¦ ÀÌ¿ëÇØ¼­, »ç¿ëÀÚȯ°æ¿¡¼­ µ¶¸³µÈ ÀÚ½ÅÀÇ È¯°æÀ» ¸¸µç´Ù. ±âÁ¸ÀÇ È¯°æÀÌ ¸®¼ÂµÇ¸é¼­ Å͹̳ÎÀÌ »ç¶óÁø´Ù. ¶ÇÇÑ »õ·Î¿î Å͹̳ÎÀ» ÁöÁ¤ÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡, ÀÌ ÇÁ·Î¼¼½º´Â °á°úÀûÀ¸·Î Å͹̳ÎÀ» °¡ÁöÁö ¾Ê°Ô µÈ´Ù.

ps¸¦ ÅëÇØ¼­ ÇÁ·Î¼¼½ºÀÇ »óŸ¦ È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ.
$ ps -efjc | grep daemon  
UID        PID  PPID  PGID   SID CLS PRI STIME TTY          TIME CMD 
yundream  8252     1  8252  8252 TS   24 00:43 ?        00:00:00 ./daemon 
 
PPID°¡ 1 À̰í, »õ·Î¿î Session IDÀÎ 8252¸¦ °¡Á³À¸¸ç (ÀÌ ÇÁ·Î¼¼½º°¡ ¼¼¼ÇÀÇ ÁÖÀÎÀ̹ǷÎ, PID°¡ SID°¡ µÈ´Ù) Å͹̳Î(TTY)°¡ ¾øÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. 28¹ø ÁÙÀÇ printf °á°úµµ È­¸é¿¡ Ãâ·ÂµÇÁö ¾Ê´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ¿ÏÀüÇÑ µ¥¸ó ÇÁ·Î¼¼½º°¡ ¸¸µé¾îÁø °ÍÀÌ´Ù.

µ¥¸ó ÇÁ·Î¼¼½º´Â ƯÈ÷ Internet¼­¹ö ÇÁ·Î±×·¥À» ¸¸µå´Âµ¥, Áß¿äÇÏ°Ô »ç¿ëµÇ´Â ±â¹ýÀ¸·Î ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö¿¡¼­ Áß¿äÇÏ°Ô ´Ù·ç¾îÁö´Â ±â¼úÀÌ´Ù.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.